■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
|
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った): |
■ ページの共有: |
[ サイト内検索 ]
![]()
カスタム検索
|
けい2002-08-29(木) 11:03
度々ですみません。 先ほどの「文字列を16進に変換するには?」で行った反対の作業を 行いたいです。 以下のソースで良いのではと思うのですが、 「型が一致しません。」というエラーが発生します。 分かる方いらっしゃいませんでしょうか? lsHex=xxxx '先ほど変換した16進が入ってるとします。(「D001_表示形式」の16進) lsData = "" lnLen = Len(lsHex) For lnCnt = 1 To lnLen Step 2 lsChar = Mid(lsHex, lnCnt, 2) lsData = lsData & Chr(CLng(lsChar)) Next lnCnt
匿名26122002-08-29(木) 11:31
> 先ほどの「文字列を16進に変換するには?」で行った反対の作業を > 行いたいです。 例に挙がっていた元データのように、全角文字が含まれる場合は、 ご提示のコードのように単純に2文字ごとに切り出したのでは元に戻せません。 自力で戻すならSJISの文字コードについての知識が必要です。 #Hex(Asc("表"))の結果は、"955C"という値になります。 #これを元の"表"に戻すには、Chr(CLng("&H" + "955C"))という変換が必要です。 #しかし、下記のコードの場合、Chr(CLng("&H"+"95"))+Chr(CLng("&H"+"5C")) #のような処理になるので"表"にはなりません。 > 以下のソースで良いのではと思うのですが、 > 「型が一致しません。」というエラーが発生します。 > 分かる方いらっしゃいませんでしょうか? この問題は、CLng(lsChar)の部分で発生しています。 例えば、CLng関数の引数には例えば"A0"のような10進数でない数値は渡せません。 VBでの16進数は頭に"&H"を付けて表現しますので、 CLng("&HA0")なら変換できます。 ----------------- 下記のようにバイト配列にデータをセットしてから、StrConv関数をかませて、 SJIS文字列の内部表現を表すバイト配列データからVBの文字列に変換すればOKです。 Dim b() As Byte > lsHex=xxxx '先ほど変換した16進が入ってるとします。(「D001_表示形式」の16進) > lsData = "" > lnLen = Len(lsHex) Redim b(lnLen \ 2 - 1) > For lnCnt = 1 To lnLen Step 2 > lsChar = Mid(lsHex, lnCnt, 2) b(lnCnt \ 2) = CByte("&H" & lsChar) > Next lnCnt lsData = StrConv(b, vbUnicode)
このページと関連する記事:
#8179-0RE#8176:なぜstr$を使うのですか?2000-03-06(月) 10:11#138-0十進数の仕方について1999-07-20(火) 01:01
#18442-0SJISコードからJISコードへの変換について2000-03-24(金) 12:11
#27779-0Mscommからの2進数データを16進に変換したい。。。2000-08-10(木) 22:25
#19979-0select caseの使い方について2002-02-27(水) 23:46
#6039-0RE#6033:テキストファイルの暗号化2000-02-19(土) 08:25
#46315-0ShiftJISコード(ASCIIコード)から文字列に変換2001-08-29(水) 20:57
#31773-0コードの変換について2000-10-16(月) 15:34
#14117-010進数変換2001-01-25(木) 16:03
#546-1入力データのJIS変換について2004-04-09(金) 01:07