マンガでよめる痔のこと・薬のこと

例えば「12345678」であれば「12 34 56 78」いうバイナリファイルが出力されるようにしたいのですが、

Using writer As New System.IO.BinaryWriter(New System.IO.FileStream("test.dat", IO.FileMode.OpenOrCreate))
writer.Write(&H1234S)
writer.Close()
End Using

このプログラムの場合、出力される"test.dat"の内容は「34 12」であり、しかも4バイトを超えるとオーバーフローしてしまうため出力することができないというエラーが出ます。
ない知恵を絞って調べているのですが、ここで詰まってしまいました。
どうか、よろしくお願い致します。

A 回答 (2件)

バイナリ出力が 逆順になるのは インテルx86アーキテクチャによるものです



12 34 56 78 と出力したいのであればByte型の配列を作成して
これに &h12、&h34、&h56、&h78を代入して writer.Write(変数) と言った具合にしましょう

dim bb(3) as Byte
bb(0) = &h12
bb(1) = &h34
bb(2) = &h56
bb(3) = &h78
writer.Write( bb )
writer.Close()
と言った具合でしょう
    • good
    • 0
この回答へのお礼

有難う御座います。
とても分かりやすく書いて戴き感謝いたします。
かなり長いバイナリを書き出したいのですが、やはり一気に書くのは不可能なのでしょうか…
有難う御座います、必ず参考にさせて頂きます。

お礼日時:2007/11/13 21:14

Byte型配列の要素を増やしてやれば可能ですよ


元のデータが Integer型なら

' nInt : 変換元になる数値
' arByte : 変換後に格納する配列
' nIndex : 格納位置の先頭
Sub Int2Byte( ByVal nInt as Integer, _
  ByRef arByte() as Byte, ByVal nIndex as Integer)
  dim n, nMask1, nMask2 as Integer
  nMask1 = &hFF000000
  nMask2 = &h1000000
  for n=0 to 3
    nB = (nInt And nMask1) / nMask2
    nMask1 = nMask1 / 256
    nMask2 = nMask2 / 256
    arByte( nIndex + n ) = nB
  next
End Sub
    • good
    • 0
この回答へのお礼

有難う御座います、この方法で上手く行きそうです!
丁寧に有難う御座いました、活用させて戴きます!

お礼日時:2007/11/14 00:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング