現在、数値をパック10進数に変換する処理を開発しています。
方法としては、数値二桁ずつを取り出し、例えば"43"なら"chr$(&h43)"というふうに変換しています。
ここで問題が発生しました。81(chr$(&h81))から99(chr$(&h99))については
すべて"00"になってしまいます。
どなたかご存じの方、対処方法を教えて頂けますでしょうか?
&H81〜&H99は、Shift-JISでは、全角文字(漢字等)を表す2バイトコードの一部です。
単独で指定した場合、「正しい文字」とは看做されません。
「文字列」ではなく、「バイト型配列」で処理してはどうでしょうか?
>大吉末吉さん
早速のご返答ありがとうございます。
はずかしいお話なのですが、
「バイト型配列」で処理
というのは具体的にどのようにするのでしょうか?
> 具体的にどのようにするのでしょうか?
は
> 数値をパック10進数に変換する処理
変換してどうするかによりますので・・・
例えば、
---------------------------------------
Dim s As String
Dim b() As Byte
Dim i As Long
s = "1234567890"
ReDim b(0 To Len(s) / 2 - 1)
For i = 1 To Len(s) Step 2
b((i - 1) / 2) = CByte("&H" & Mid(s, i, 2))
Next
Dim fn
fn = FreeFile()
Open "C:\out.txt" For Binary As fn
Put #fn, , b
Close #fn
----------------------------------------
こうすれば、ファイルに、16インコードで
12 34 56 78 90
が出力されます。
>大吉末吉さん
度々のご返信ありがとうございます。
大吉末吉さんより教えて頂いた方法でできました。
まさに、テキストファイルに出力する処理を開発中なのです。
しかし、Open時に「BINARY」としてしまうとほかの値もBINARYになってしまいますよね?
何か、この変換した部分だけをテキストファイルに出力する方法は
ないでしょうか?
何度も申し訳ありませんが、宜しくお願いします。
テキストファイルとして出力する場合、一旦文字列に変換されます。
そうすると、元の木阿弥です。
思いつく方法は・・・
(方法1)
OutputモードでOpenして、通常の文字を出力する。
パック変換部分になったら一旦Closeし、BinaryでOpenしなおす。
ファイル末尾にSeekで移動して、パック変換部分を出力。
また、CloseしてOutputモードでOpenしなおして、通常の文字列を出力
・・・を繰り返す
(方法2)
BinaryでOpenし、通常の文字列も一旦Byte配列に変換してからバイナリーで出力
方法2の場合、例えば、
------------------------------------
Dim fn
fn = FreeFile()
Dim b2() As Byte
Open "C:\out.txt" For Binary As fn
b2 = StrConv(",あいうえお", vbFromUnicode)
Put #fn, , b2
Close #fn
------------------------------------
の様にすれば、Binaryモードで文字列が出力されます。
一点訂正。
> また、CloseしてOutputモードでOpenしなおして、通常の文字列を出力
「Output」でOpenしなおしたら、今までの出力が消えてしまいますね。
「Append」の間違いです。
>大吉末吉さん
何度もありがとうございます。
教えて頂きました方法2で実現することができました。
ありがとうございました。大変助かりました。
また、宜しくお願い致します。
解決です。
編集 削除