2017-07-04 13 views
1

ファイルから特定のバイトを別の特定のバイトに置き換えようとしていますが、バイナリライタが多すぎるバイトを置き換えるのに問題があります。私のコードで何が間違っていますか?ファイル内のバイトを置換する

using (BinaryWriter bw = 
    new BinaryWriter(File.Open(fileName, 
     FileMode.Open))) 
{ 
    bw.BaseStream.Position = 0x3; 
    bw.Write(0x50); 
} 

これは文字「P」の文字「E」(16進の0x45)を変更することになって、その代わりにそのバイトと3バイト以上を変更しました。 「45 30 31 FF」から「50 00 00 00」に変更される。 "30 31 FF"は "45"を "50"に変更するだけです。

+0

この記事で短い表記について確認したい場合があります。https://stackoverflow.com/questions/5820721/c-sharp-short-long-int-literal-format#5820772 – Stefan

答えて

3

基本的には、このためにBinaryWriterを使用する必要はありません。あなたはBinaryWriter.Write(int)と呼んでいますが、これは文書化されているのとまったく同じです。

だけで1バイトを書き込むためにFileStreamを使用します。

using (var stream = File.Open(fileName)) 
{ 
    stream.Position = 3; 
    stream.WriteByte(0x50); 
} 

シンプル、簡単に(それは明らかに1バイトだけを書いています)読み、何をしたいんし。

+0

魅力:) – Seregon85

1

方法Writeは実際にはint(4バイト)と書いています。値をbyteタイプに変換する必要があります。 bw.Write((byte)0x50);

関連する問題