一般的なバイナリエディタでは英数字記号以外の文字を"."で表示しています。
ひらがなや漢字も".."として表示されます。
(例) 0x00 0x11 0x22 0x33 0x44 0x55 0x66 ↓ .."3DUf
バイナリエディタの表示方法とまったく同じことをしたくていくつかの方法で試してみました。
peekで判別するのが最も正確だと思うのですが、どうも納得いきません。
screen 0, 1080, 240 // 変数に適当なバイナリデータ書き込み sdim buf, 128 repeat 64 poke buf, cnt, cnt loop repeat 64 poke buf, 64+cnt, 128+cnt loop pos 0, 0 : mes "▼mesでそのまま表示" sdim char, 64 repeat 128 getstr char, buf, cnt, 0, 1 pos cnt*8, 32 : mes char loop pos 0, 64 : mes "▼getstrの返り値で判定" repeat 128 getstr char, buf, cnt, 0, 1 pos cnt*8, 96 if strsize == 0 : mes "." if strsize == 1 : mes char if strsize == 2 : mes "." loop pos 0, 128 : mes "▼peekの返り値で判定" repeat 128 getstr char, buf, cnt, 0, 1 pos cnt*8, 160 if peek(char, 0) <= 31 : mes "." if peek(char, 0) >= 32 : mes char // これ以外にも判定をたくさん付ける loop stop
・peekでは判別が面倒
・2バイト文字をはじくだけでは0x00 - 0x31のような文字に対応できない
・一般的な英数字判別方法はヌル文字(0x00)に対応していない
というようなことが問題だと思います。
あらゆるバイナリデータから簡単に英数字記号を判別できる方法はあるのでしょうか。