バイナリデータ(String)を1ByteずつHexに変換

解決


まるこ  2003-07-02 07:26:58  No: 78499

バイナリファイルに  01 00 03 8F 01 00 00 10・・・・  と入っています
Dim buf As String  
それを  Get #1,, buf で読み込んで
1Byteずつ  Hexコードとして表示したいのですが
処理としては
for i = 1 to len(buf)
    Debug.Print Hex(Asc(Mid(buf, i, 1)))
next i
8Fと次の01  がくっついて
01 00 03 8145 00 00 10と表示されてしまいます
なぜ上位ビットが立つと化けてしまうのでしょうか?

バイト配列でGetすれば問題は無いのですが
Stringの可変長なので、Stringとして処理したいのです。
色々調べてみたのですが、どうしても分かりません。
是非対処方法を教えてください。


魔界の仮面弁士  2003-07-02 07:50:16  No: 78500

Asc関数、AscW関数、AscB関数の違いについて調べてみてください。


まるこ  2003-07-02 08:35:01  No: 78501

AscB で表示すると、8F 01 の部分は  FB に
AscW で表示すると、30FB  と表示されます。
いずれにしろ、8F 01  の2バイトがくっついてしまって化けてしまいます。
また、それにより1バイトずつずれてしまいます。
すみません、MSDNで調べたりしたのですが、どうにも分からないのです。


Loreley  2003-07-02 12:15:35  No: 78502

2バイトくっつくのは少し置いといて、
なぜくっつくならくっつくで8F01ではなく8145なのかを。

VBで、同じ方法でバイナリデータをなにかStringに読み込んで
テキストボックスに表示すると、文字として表示できないデータの場合は
'・'という点になります。
全角の場合も同様で、'・'という全角の点に変換されます。
この'・'という文字はShift JISの文字コードで8145になります。
これが理由です。


まるこ  2003-07-03 00:44:47  No: 78503

みなさまありがとうございました。
Byte配列で読み込んで処理したところ
きちんと動きました。
ありがとうございました。


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

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






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