- ベストアンサー
Visual Basic でのコードをASCII変換、16進変換したものを元に戻す方法を教えてください
string(9)のエリア"Aa1アあa "の文字を1文字ずつASCII変換して、16進変換し、string(18)のエリアに格納します すると"416131B182A08281202020"と変換されます (一文字ずつ Hex(Asc(Buf))を使用しました) 逆に、"416131B182A08281202020"を"Aa1アあa "に戻したいのですが、 どのような関数を使えばよいのかわかりません。 困っています。教えてください。よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
VB既存の関数ではできないと思うので、自分で関数を作るなりしてください。 ヒントです。 ASC関数により変換された2バイト文字(シフトJIS)の1バイト目は81~9FおよびE0~FC(すべて16進)になります。 16進数から10進数に戻すには、頭に"&H"をつけます。(&H82A0 = 「あ」のシフトJISコード) 文字を数字に変換するのはVal関数、数字(文字コード)から文字に変換するのはChr関数です。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
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
お礼
回答ありがとうございます。 無事解決いたしました。 ちなみに「ア」は半角だったんです。 質問の投稿が半角が全角に変換されることを知りませんでした。 投稿したところ、半角は全角に・・って書かれていたのですが、質問の変更、追記の仕方がわからず、そのままになってしまいました。 変換後に2バイト文字だったかどうか確認するのもありなんだと。。 ところが前述していますとおり半角「ア」でしたので、B1を変換すると177となり、正しく変換できませんでした。 先の方のヒントを用い、自分でコーディングしましたが しばらくVBから離れていたので(言い訳ですね(^^;)よりスマートですので コーディングは参考にさせていただきます。ありがとうございました。
- otto0001otto
- ベストアンサー率25% (64/249)
41 61 31 まではいいけど 「ア」は,8250H になるんじゃないでしょうか。 そうであれば、Chr関数で戻せると 思いますが。
お礼
回答ありがとうございます。 無事解決いたしました。 ちなみに「ア」は半角だったんです。 質問の投稿が半角が全角に変換されることを知りませんでした。 投稿したところ、半角は全角に・・って書かれていたのですが、質問の変更、追記の仕方がわからず、そのままになってしまいました。
お礼
ヒントのおかげで無事解決いたしました。 サンプルの2文字からうっかり、2バイト文字の頭には82がつくと限定してしまうところでした。 ありがとうございます!!