• ベストアンサー

Visual Basic でのコードをASCII変換、16進変換したものを元に戻す方法を教えてください

string(9)のエリア"Aa1アあa "の文字を1文字ずつASCII変換して、16進変換し、string(18)のエリアに格納します すると"416131B182A08281202020"と変換されます (一文字ずつ Hex(Asc(Buf))を使用しました) 逆に、"416131B182A08281202020"を"Aa1アあa "に戻したいのですが、 どのような関数を使えばよいのかわかりません。 困っています。教えてください。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DVD-RW
  • ベストアンサー率36% (195/541)
回答No.1

VB既存の関数ではできないと思うので、自分で関数を作るなりしてください。 ヒントです。 ASC関数により変換された2バイト文字(シフトJIS)の1バイト目は81~9FおよびE0~FC(すべて16進)になります。 16進数から10進数に戻すには、頭に"&H"をつけます。(&H82A0 = 「あ」のシフトJISコード) 文字を数字に変換するのはVal関数、数字(文字コード)から文字に変換するのはChr関数です。

HIMAWARIe
質問者

お礼

ヒントのおかげで無事解決いたしました。 サンプルの2文字からうっかり、2バイト文字の頭には82がつくと限定してしまうところでした。 ありがとうございます!!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Dim text As String Dim outText As String Dim i, wk text = "416131834182A0828120" '質問の中の文字はたぶん間違いだと思います For i = 1 To Len(text) Step 2 wk = Val("&H" & Mid(text, i, 2)) If wk > 127 Then wk = Val("&H" & Mid(text, i, 4)) i = i + 2 End If outText = outText & Chr(wk) Next Debug.Print outText

HIMAWARIe
質問者

お礼

回答ありがとうございます。 無事解決いたしました。 ちなみに「ア」は半角だったんです。 質問の投稿が半角が全角に変換されることを知りませんでした。 投稿したところ、半角は全角に・・って書かれていたのですが、質問の変更、追記の仕方がわからず、そのままになってしまいました。 変換後に2バイト文字だったかどうか確認するのもありなんだと。。 ところが前述していますとおり半角「ア」でしたので、B1を変換すると177となり、正しく変換できませんでした。 先の方のヒントを用い、自分でコーディングしましたが しばらくVBから離れていたので(言い訳ですね(^^;)よりスマートですので コーディングは参考にさせていただきます。ありがとうございました。

回答No.2

41 61 31 まではいいけど 「ア」は,8250H になるんじゃないでしょうか。 そうであれば、Chr関数で戻せると 思いますが。

HIMAWARIe
質問者

お礼

回答ありがとうございます。 無事解決いたしました。 ちなみに「ア」は半角だったんです。 質問の投稿が半角が全角に変換されることを知りませんでした。 投稿したところ、半角は全角に・・って書かれていたのですが、質問の変更、追記の仕方がわからず、そのままになってしまいました。

関連するQ&A