文字列を16進数で取り出すには

解決


ともぞう  2003-11-18 23:13:12  No: 110018

はじめて質問させていただきます。
文字列から1文字ずつAscで取り出すところで行き詰まっています。
アスキー文字以外の0xF6等のヨーロッパで使用されている文字をAscで
取り出すと負数のよくわからない数値になってしまいます。
これを246(数値 or 文字列)として取り出せないでしょうか?
("F6"として取り出せたとしても数値への変換が分かりません)
すごく基礎的な質問なのですが、よろしくお願いします。


とろ  2003-11-19 00:04:15  No: 110019

こんな感じですか?

  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))


mady  2003-11-19 00:43:05  No: 110020

>負数のよくわからない数値

2バイト文字は最上位ビットを立てて、
1バイト文字と区別をするので、絶対に負の値になります。
負の値が取れるということは正常です。

プログラムをする上での入門知識ですが、
16進数で-1という値はすべての桁がFになっている状態のことです。

で、そのまま16進変換するとffff…とfが多すぎになると思うので、
下4桁のみを切り出せば、通常得たい文字コードを取得することができます。


ともぞう  2003-11-19 02:35:39  No: 110021

とろさん、madyさん、ありがとうございます。
とろさんに教えていただいた方法で16進数のデータが取得できました。
このデータは全て1バイト文字で、ヨーロッパ(ドイツ語、...)の文字データ
なのですが、vbFromUnicodeで問題なくできそうです。
負の値なのですが、0xf6をAscで出力すると-2445という値が出てきました。
Hexにするとx98dとなり0xf6を取得できなそうです。
1バイト文字の場合は扱いが違うのかもしれません。
あとは、16進数の文字列を10進数に変換する方法なのですが、実はこれも
分かっていません。
あつかましいのですが、この変換関数などありましたら
教えていただけないでしょうか?
よろしくお願いします。


ともぞう  2003-11-19 02:44:31  No: 110022

大変失礼しました。
Hex関数をつけなければ10進数ですね。


ともぞう  2003-11-19 03:48:39  No: 110023

すいません、解決していませんでした。
StrConv(s, vbFromUnicode)ですと、2バイト目(偶数番目)に
特殊文字(0xfcなど)がくると正常に変換できていないみたいです。
難しいです。


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

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






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