初心者です。お世話になります。
漢字コードについて教えていただきたいのですが。
Dim A As String
A = "あ"
Debug.Print Asc(A) '結果→ -32096
Debug.Print Chr(-32096) '結果→ あ
Debug.Print Hex(Asc(Chr(-32096))) '結果→ 82A0
'ここまでは納得ですが・・・・。
'82→ 10進数=130 'A0→ 10進数=160
'130 * 256 + 160 = 33440
'33440 と -32096 がわかりません。
ファイルからバイナリコードで1バイトづつ取得して
82 と A0 を取得できるところまではたどりついたので
すが82とA0から「あ」という文字にたどり着けません。
よろしくお願いします。
Debug.Print Hex$(CInt(33440 Or &HFFFF0000))
> 82とA0から「あ」という文字にたどり着けません。
『Debug.Print Chr(&H82A0)』、という話ではなく?
> '33440 と -32096 がわかりません。
『Debug.Print CLng("&H82A0"), CInt("&H82A0")』、だからでしょう。
Integer の範囲は、-32,768 〜 32,767 ですよね。これを言い換えると、
0000 → 0
0001 → 1
:
7FFE → 32,766
7FFF → 32,767
8000 → -32,768
8001 → -32,767
:
FFFE → -2
FFFF → -1
のように、&H8000 を境に、プラスとマイナスが入れ替わります。
一方、Long の範囲は、-2,147,483,648 〜 2,147,483,647。こちらは、
00000000 → 0
00000001 → 1
:
7FFFFFFE → 2,147,483,646
7FFFFFFF → 2,147,483,647
80000000 → -2,147,483,648
80000001 → -2,147,483,647
:
FFFFFFFE → -2
FFFFFFFF → -1
です。
早速のご指導ありがとうございます。
Debug.Print Chr(33440 Or &HFFFF0000) '結果→あ
となりました。本当にありがとうございます。
ただ、なぜ?という疑問は解決しておりません。
もう少し自分なりにも調べてみおますので、しばらく
「解決済み」まで猶予をください。
K.J.K.さまのご指導でできるようになりました。
魔界の仮面弁士さまのご指導で理解することもできました。
お二人の超迅速かつ超ご親切なご指導を心から感謝いたします。
またここは、すばらしい掲示板だなあと感激もしております。
本当にありがとうございました。
ツイート | ![]() |