HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0813
WIN_ssdim内のバイナリデータ長の調べ方ってありますか?5未解決


WIN_s

リンク

2009/8/13(Thu) 13:14:15|NO.27037

sdimで確保した変数にバイナリデータを保持しています。
バイナリデータの途中には0x00が含まれる可能性があります。
このsdim内の格納データの長さを知る方法はありませんでしょうか。

仕様上、格納されるデータを知る(記憶しておく)ことができないので、
データ格納済みのsdimバッファから長さを知りたいと思っています。


//dummyの試験用データ生成 randomize sdim buf,1000 len = rnd(1000) //この長さを知りたい for i,0,len,2 poke buf,i,rnd(255) //適当に値を入力 poke buf,i+1,0 //1文字ごとにNULL文字記入 next //bufの中を覗いてみる mes "strlen = " + strlen(buf) + ", len = " + len mes "mes結果-----------------------------------------" mes "" + buf mes "dump結果-----------------------------------------" mes " " color 180,180,180:boxf 0,ginfo_cy,ginfo_mesx,ginfo_winy:color for i,0,len s = "" + strf("%04X ", i * 16) for foo,0,16 s += strf("%02X ", peek(buf, i)) i++ if i >= len {_break} next mes s next



この記事に返信する


SYAM

リンク

2009/8/13(Thu) 15:49:20|NO.27041

不可能です。
終端を表現できないデータは、それを作る側がデータ長を管理する責任を負うしかありません。

とはいえ、データを作って格納する側がデータ長を知らない、管理できないというのはかなり考えにくい話です。
サンプルの場合も、そもそもデータ長が決まってからデータを生成していますね。


>格納されるデータを知る(記憶しておく)ことができない

…このあたりが、いったい何をしているのかよくわかりません。
自分でも何をどれだけ生成しているのかわからなくなってしまうスクリプトって、どういうものでしょうか?



ほげ

リンク

2009/8/13(Thu) 20:53:43|NO.27047

確保中の文字列バッファサイズならわかるようです
http://hspdev-wiki.net/?HSP3%2FSTRBUF



ANTARES

リンク

2009/8/14(Fri) 00:37:34|NO.27049

>仕様上、格納されるデータを知る(記憶しておく)ことができないので、
>データ格納済みのsdimバッファから長さを知りたいと思っています。
 バイナリデータを扱う場合はデータと共にデータ長を必ず
受け渡しするのが鉄則であり、それができないのは設計が
破綻していると言わざるを得ません。
 固定長にできる場合はデータ長の受け渡しをしないことも可能ですが。
 ほかには、データに現れることがあり得ない値があるなら、
予めバッファをその値で埋めておくという方法もありますが、
無条件ではあり得ません。



M

リンク

2009/8/14(Fri) 01:23:07|NO.27050

バッファのお尻から調べてゆき、NULL以外の文字が見つかった場所で止めるようにすれば、けっこう良い確率で正解すると思う。



えく

リンク

2009/8/14(Fri) 01:26:39|NO.27051

またはその文字列の先頭の数バイトをデータの長さの表現にあてるとか
(結局データ長を保持する変数とデータ部それ自体が一つになっただけで根本的解決はしてないですが



ONION software Copyright 1997-2023(c) All rights reserved.