VB6でバイト配列を文字列に変換するには?


あさや  2006-01-29 18:56:37  No: 93868

bytData() = "02 54 58 54 88 82 82 30 30 30 31 30 30 03"
上記のバイト配列を文字列にするにはどうすれば良いでしょうか?
StrConv(bytData, vbUnicode)を使うと5バイト目からの"88 82 82"が
正しく変換できませんでした。

また、変換後の文字列からMidB(〜, 8, 3)を使って"000"を取得できますか?

VB6/WinXP


ガッ  2006-01-29 20:26:30  No: 93869

> bytData() = "02 54 58 54 88 82 82 30 30 30 31 30 30 03"
単純に「Byte()にStringを入れているだけ」なら、
debug.? CStr(bytData)
とすると、Byte()→Stringがされて "02 54 58 .. 03"が表示されます。

そうではなく、
bytData(LBound(bytData)+0)=2
bytData(LBound(bytData)+1)=54
bytData(LBound(bytData)+2)=58
..
というのなら、この掲示板などでADODB.Streamについて調べてください。

※どんな文字列なんだろう…


ガッ  2006-01-29 20:34:21  No: 93870

ちょっとバイナリエディタに 02 54 .. 03 を書いてみました。
これってもしかして、文字列と文字列以外のデータが混ざったものなのではないでしょうか?
そういった場合は、全て一括に文字列に変換させるのではなく、
ちゃんとフォーマットに則って「○〜×までは数値、×+1〜△までは文字列…」という区切りを以って処理するのが普通だと思います。

また、書きそびれましたが、
> 変換後の文字列からMidB(〜, 8, 3)を使って"000"を取得できますか?
これはできません。
VB6のStringの内部表現は2バイトを1文字として扱うものなので、
3バイトだけ切り取って3文字になることは無いからです。


あさや  2006-01-30 03:19:10  No: 93871

説明不足ですみません。
bytData()に入っているデータは以下のようになっています。
bytData(0) = CByte(&H02)
bytData(1) = CByte(&H54)
bytData(2) = CByte(&H58)
bytData(3) = CByte(&H54)
...

このバイト配列を文字列にするとbytData(4) 〜 bytData(6)にあたる部分が
正しい値になっていませんでした。
#文字列にしたデータをバイナリでファイルに書き出して確認しました。

>ガッさん
このバイト配列は通信用のデータで、5バイト目から3バイト分が相手機器の
ステータスが入っています。それ以外はアスキーコードです。

データを区切って処理したほうが良いですよね…
その方法で検討してみます。

#String型でバイトの処理をするのが間違いなんですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加