こんばんは。
任意の全角文字のShift-JISコード(2バイト)を取得したいと思います。
例えば、"亜"という漢字のShift-JISコードは"889F"だと思いますが、単純にAsc関数を使用すると、
Asc("亜") → -30561
Hex(Asc("亜")) → "FFFF889F"
となり、"FFFF"が余計についてきます。
この右4桁を取り出せば目的の"亜"という漢字のShift-JISコード("889F")を得ることができるのですが、
もっとシンプルに"亜"という漢字のShift-JISコード("889F")を取得できる方法はないでしょうか?
というのも、Chr関数で文字コードを文字に変換するとき、
Chr(&HFFFF889F) → "亜"
Chr(&H889F) → "亜"
となり、違う数字なのにも関わらず同じ漢字が得られるため、上記方法で本当にいいのかどうか不安であり、
他にちゃんとした方法があるのではないかという疑問を感じたためです。
使用しているのはVB2008(Express)です。
どうぞアドバイスをお願いいたします。
自己レスです。
色々と調べた結果、以下のようにShift-JISにエンコードしたもののバイト配列を取得するようにしても希望する結果が得られることが分かりました。
Dim sjText As String = "亜"
Dim sjCode As String = ""
Dim byt() As Byte = System.Text.Encoding.GetEncoding("shift_jis").GetBytes(sjText)
For i = 0 To byt.Length - 1
sjCode &= Hex(byt(i))
Next
MsgBox(sjCode)
この方がスマートだし、複数の文字の場合もそのまま使えそうです。
お騒がせしました。
Module A
Sub Main()
Test( "亜"c )
Test( "C"c )
End Sub
Sub Test(ByVal c As Char)
MsgBox( String.Format("SJIS=[{0:X4}], Unicode=[{1:x}]", CShort(Asc(c)), AscW(c)), vbInformation, c)
MsgBox( CShort(Asc(c)).ToString("x4"), vbInformation, c )
MsgBox( CShort(Asc(c)).ToString("x"), vbInformation, c )
MsgBox( Right("0000" & Hex(CShort(Asc(c))), 4), vbInformation, c )
MsgBox( Hex(CShort(Asc(c))), vbInformation, c )
MsgBox( String.Format("{0:x4}", Asc(c) And &HFFFF), vbInformation, c )
MsgBox( (Asc(c) And &HFFFF).ToString("X4"), vbInformation, c )
MsgBox( Hex(Asc(c) And &HFFFF), vbInformation, c )
End Sub
End Module
Module A
Sub Main()
Dim s As String = "a=b≠"
Dim b() As Byte = System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(s)
MsgBox( BitConverter.ToString(b) )
End Sub
End Module