はじめて質問させていただきます。
文字列から1文字ずつAscで取り出すところで行き詰まっています。
アスキー文字以外の0xF6等のヨーロッパで使用されている文字をAscで
取り出すと負数のよくわからない数値になってしまいます。
これを246(数値 or 文字列)として取り出せないでしょうか?
("F6"として取り出せたとしても数値への変換が分かりません)
すごく基礎的な質問なのですが、よろしくお願いします。
こんな感じですか?
Dim s As String
Dim b() As Byte
s = "あ"
Debug.Print Asc(s), AscB(s) '<- マイナスの値を返す
b() = StrConv(s, vbFromUnicode)
Debug.Print Hex(b(0)), Hex(b(1))
>負数のよくわからない数値
2バイト文字は最上位ビットを立てて、
1バイト文字と区別をするので、絶対に負の値になります。
負の値が取れるということは正常です。
プログラムをする上での入門知識ですが、
16進数で-1という値はすべての桁がFになっている状態のことです。
で、そのまま16進変換するとffff…とfが多すぎになると思うので、
下4桁のみを切り出せば、通常得たい文字コードを取得することができます。
とろさん、madyさん、ありがとうございます。
とろさんに教えていただいた方法で16進数のデータが取得できました。
このデータは全て1バイト文字で、ヨーロッパ(ドイツ語、...)の文字データ
なのですが、vbFromUnicodeで問題なくできそうです。
負の値なのですが、0xf6をAscで出力すると-2445という値が出てきました。
Hexにするとx98dとなり0xf6を取得できなそうです。
1バイト文字の場合は扱いが違うのかもしれません。
あとは、16進数の文字列を10進数に変換する方法なのですが、実はこれも
分かっていません。
あつかましいのですが、この変換関数などありましたら
教えていただけないでしょうか?
よろしくお願いします。
大変失礼しました。
Hex関数をつけなければ10進数ですね。
すいません、解決していませんでした。
StrConv(s, vbFromUnicode)ですと、2バイト目(偶数番目)に
特殊文字(0xfcなど)がくると正常に変換できていないみたいです。
難しいです。
ツイート | ![]() |