バイナリーファイルの出力

解決


Jack  2005-09-29 23:02:39  No: 125880

バイナリーファイルを作成しています。
typUser(i).UserIdへは 8桁のID番号が入っています。(String型)

例えば typUser(i).UserId を "12345678" とします。
これをバイナリー表示にすれば "00 BC 61 4E" となります。
そして、作成した .dat ファイルをバイナリーエディタで開いたとき"00 BC 61 4E"と表示させたいです。

        bytOutputData(0) = CByte("&H" & Mid(typUser(i).UserId, 1, 2))
        bytOutputData(1) = CByte("&H" & Mid(typUser(i).UserId, 3, 2))
        bytOutputData(2) = CByte("&H" & Mid(typUser(i).UserId, 5, 2))
        bytOutputData(3) = CByte("&H" & Mid(typUser(i).UserId, 7, 2))

の部分の格納がどうしても上手くいかず、手詰まりになりました。
どうかご教授ください。

バイナリデータを出力
    strFileName = "ID001.dat"
    strFilePath = labOutputPath.Caption & "\" & strFileName
    intFileNo = FreeFile
    
Open strFileName For Binary Access Write As #intFileNo

    For i = 0 To UserCount - 1
        ' カードID(4)
        bytOutputData(0) = CByte("&H" & Mid(typUser(i).UserId, 1, 2))
        bytOutputData(1) = CByte("&H" & Mid(typUser(i).UserId, 3, 2))
        bytOutputData(2) = CByte("&H" & Mid(typUser(i).UserId, 5, 2))
        bytOutputData(3) = CByte("&H" & Mid(typUser(i).UserId, 7, 2))
        Put #intFileNo, , bytOutputData
    Next
    
    Close #intFileNo


通り巣鴨  2005-09-29 23:16:05  No: 125881

bytOutputData(0) = CByte("&H" & Mid(Hex(typUser(i).UserId), 1, 2))
じゃないのかな?


ひでらん  2005-09-30 00:29:18  No: 125882

同じ様な書き方で

bytOutputData(0) = CByte("&H" & Mid(Right("00000000" & Hex(typUser(i).UserId), 8), 1, 2))

でどうでしょう


Jack  2005-09-30 01:13:01  No: 125883

通り巣鴨さん ひでらんさん ありがとうございます。
bytOutputData(0) = CByte("&H" & Mid(Hex(typUser(i).UserId), 1, 2))は
3バイト目で型の不一致エラーが出てしまいました。
bytOutputData(0) = CByte("&H" & Mid(Right("00000000" & Hex(typUser(i).UserId), 8), 1, 2))
のやり方で、期待通りの動作ができました。

関連の質問なのですが
bytOutputData(0) = CByte("&H" & Mid(Format(Hex(typUser(nLp).UserId), "00000000"), 1, 2))
この質問の前にという形でもやっているのですが、こちらでは"型が一致しません"とのエラーがでました。
この場合に何故Format関数はエラーでRight関数はOKなのでしょうか?

問題自体は解決したのですが、お願いしますm(_ _)m


ひでらん  2005-09-30 02:26:31  No: 125884

>Format(Hex(typUser(nLp).UserId), "00000000")

"00000000"の場合は数字しか入れられないはずです。
Hex関数を使用しているので"A"〜"F"までの文字が
入りますからエラーが出るのではないでしょうか?
※MSDNライブラリのFormat関数を参照
「関連項目」の「数値表示書式指定文字」

>Right("00000000" & Hex(typUser(i).UserId), 8)

これは、"00000000"という文字列に、Hexの文字列をくっつけて、
右から8文字取得しているだけで、書式は一切変更してないです。

これでわかりますか?


Jack  2005-09-30 02:36:56  No: 125885

ひでらんさん 有難うございました。
わかりやすい、説明をありがとうございます。
理解できました。

また、MSDNの説明にしっかり書いてありました。
すみません見落としてました。

丁寧に有難うございましたm(_ _)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加