Shift-Jisの2バイトコードを取得するには?

解決


トヨダイ  2009-09-19 23:51:37  No: 142551  IP: 192.*.*.*

こんばんは。
任意の全角文字の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)です。
どうぞアドバイスをお願いいたします。

編集 削除
トヨダイ  2009-09-20 00:29:53  No: 142552  IP: 192.*.*.*

自己レスです。
色々と調べた結果、以下のように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)

この方がスマートだし、複数の文字の場合もそのまま使えそうです。
お騒がせしました。

編集 削除
魔界の仮面弁士  2009-09-20 00:37:47  No: 142553  IP: 192.*.*.*

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

編集 削除
魔界の仮面弁士  2009-09-20 00:40:51  No: 142554  IP: 192.*.*.*

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

編集 削除