バイナリファイルに 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として処理したいのです。
色々調べてみたのですが、どうしても分かりません。
是非対処方法を教えてください。
Asc関数、AscW関数、AscB関数の違いについて調べてみてください。
AscB で表示すると、8F 01 の部分は FB に
AscW で表示すると、30FB と表示されます。
いずれにしろ、8F 01 の2バイトがくっついてしまって化けてしまいます。
また、それにより1バイトずつずれてしまいます。
すみません、MSDNで調べたりしたのですが、どうにも分からないのです。
2バイトくっつくのは少し置いといて、
なぜくっつくならくっつくで8F01ではなく8145なのかを。
VBで、同じ方法でバイナリデータをなにかStringに読み込んで
テキストボックスに表示すると、文字として表示できないデータの場合は
'・'という点になります。
全角の場合も同様で、'・'という全角の点に変換されます。
この'・'という文字はShift JISの文字コードで8145になります。
これが理由です。
みなさまありがとうございました。
Byte配列で読み込んで処理したところ
きちんと動きました。
ありがとうございました。
ツイート | ![]() |