C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 16進数のデータをバイナリデータに書き込む


(過去ログ 22 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■9458 / inTopicNo.1)  16進数のデータをバイナリデータに書き込む
  
□投稿者/ えふ (3回)-(2007/10/27(Sat) 16:09:20)

分類:[VB.NET/VB2005] 

XXX.binファイルに16進数データを書き込みたいのですが、その実現方法が分かりません。どうかご教授下さい。

文字列として書き込むという認識で良いのか?
ただ、文字列として書き込んだ場合、ASCIIコードとして認識されてしまいます。
何か他の手段があるのか。。

例)
2バイトの16進数データ(0145Hex)を指定ファイルの1バイト目に書き込む場合
↓↓↓
<VBFixedString(2)> Private strbuff As String = ""
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
strbuff="0145"
FileSystem.FilePut(fno, strbuff, 1)

これを実行すると、下記バイナリデータの結果が得られます。

04 00 30 30 31 34 ......
(左から1,2...バイトとなります)

私の欲しい結果としては
↓↓
01 45 XX XX XX XX ..... です。


よろしくお願い致します。




引用返信 編集キー/
■9460 / inTopicNo.2)  Re[1]: 16進数のデータをバイナリデータに書き込む
□投稿者/ 魔界の仮面弁士 (491回)-(2007/10/27(Sat) 16:50:09)
No9458 (えふ さん) に返信
> XXX.binファイルに16進数データを書き込みたいのですが、
> その実現方法が分かりません。どうかご教授下さい。

Using writer As New System.IO.BinaryWriter(New System.IO.FileStream("C:\XXX.bin", IO.FileMode.OpenOrCreate))
 writer.Write(&h0145s)
 writer.Close()
End Using

とか。

> 2バイトの16進数データ(0145Hex)を指定ファイルの1バイト目に書き込む場合
> 01 45 XX XX XX XX ..... です。

0145h だったら、 データは 45 01 xx xx xx …になるのでは?
引用返信 編集キー/
■9462 / inTopicNo.3)  Re[1]: 16進数のデータをバイナリデータに書き込む
□投稿者/ mあ@反省中 (1回)-(2007/10/27(Sat) 17:08:39)
No9458 (えふ さん) に返信

BinaryWriter が使えます。

BinaryWriterで、文字列、"1234" を書き込むと、
31 32 33 34
て書き込まれますから。注意して下さい。

0x という接頭辞は、C#/C++/Java/Perl 等、C言語ベースの言語の16進数の表記です。
VB だと、&H ですかね。

"1234" 文字列 は、0x31,0x32,0x33,0x34
Integer(1024) は、0x00,0x04,0x00,0x00
です。
全て文字列で書き込む場合はバイト順は意識する必要ありません。

int q = 0x00000001;
char* p = (char*)&q;
if (p[0]) {
//1バイト型より大きいデータ型のバイト順が逆になる
}
else {
//全データ型のバイト順は書き込まれたまんま
}


がんばって下さい。


# 文字列の "1234" が バイナリファイル上で、
# 12 34 ...
# となるためには、パック10進数について調べて下さい。
# COBOL の COMP3 とかも併せて調べておくと良いかもです。


引用返信 編集キー/
■9487 / inTopicNo.4)  Re[2]: 16進数のデータをバイナリデータに書き込む
□投稿者/ えふ (4回)-(2007/10/28(Sun) 21:00:55)
No9462
魔界の仮面弁士殿
mあ@反省中殿
ご回答ありがとうございます。

BinaryWriterに書込みを実現できました。
↓↓
Using writer As New System.IO.BinaryWriter(New System.IO.FileStream("C:\XXX.bin", IO.FileMode.OpenOrCreate))
 writer.Write(&h0145s)
 writer.Close()
End Using


もう1点質問なのですが、書込み開始位置を可変したい場合どうすればよろしいでしょうか?
上記コードだと、1バイト目に書き込まれるのですが、例えば10バイト目に書き込みたい場合など。。

申し訳ありませんがよろしくお願い致します。


引用返信 編集キー/
■9488 / inTopicNo.5)  Re[3]: 16進数のデータをバイナリデータに書き込む
□投稿者/ えふ (5回)-(2007/10/28(Sun) 21:01:05)
No9487 (えふ さん) に返信
> ■No9462
> 魔界の仮面弁士殿
> mあ@反省中殿
> ご回答ありがとうございます。
>
> BinaryWriterに書込みを実現できました。
> ↓↓
> Using writer As New System.IO.BinaryWriter(New System.IO.FileStream("C:\XXX.bin", IO.FileMode.OpenOrCreate))
>  writer.Write(&h0145s)
>  writer.Close()
> End Using
>
>
> もう1点質問なのですが、書込み開始位置を可変したい場合どうすればよろしいでしょうか?
> 上記コードだと、1バイト目に書き込まれるのですが、例えば10バイト目に書き込みたい場合など。。
>
> 申し訳ありませんがよろしくお願い致します。
>
>
引用返信 編集キー/
■9489 / inTopicNo.6)  Re[3]: 16進数のデータをバイナリデータに書き込む
□投稿者/ 魔界の仮面弁士 (492回)-(2007/10/28(Sun) 21:04:31)
No9487 (えふ さん) に返信
> もう1点質問なのですが、書込み開始位置を可変したい場合どうすればよろしいでしょうか?

Seek メソッドで。
引用返信 編集キー/
■9521 / inTopicNo.7)  Re[4]: 16進数のデータをバイナリデータに書き込む
□投稿者/ ラーメン太郎 (3回)-(2007/10/29(Mon) 19:32:00)
No9489 (魔界の仮面弁士 さん) に返信

すいません、ありがとうございます。

解決済み
引用返信 編集キー/
■9522 / inTopicNo.8)  Re[5]: 16進数のデータをバイナリデータに書き込む
□投稿者/ 魔界の仮面弁士 (496回)-(2007/10/29(Mon) 19:37:29)
No9521 (ラーメン太郎 さん) に返信
> すいません、ありがとうございます。

……えふさんですか? > ラーメン太郎さん
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -