次の構造のバイナリファイルを読み書きしたい:
ファイルは「RECORDS」で構成されています。各「RECORD」の構造は次のとおりです。最初のレコードを例として使用します
- (赤)STARTバイト:0x5A(常に1バイト、固定値0x5A)
- (緑)LENGTHバイト:0x00 0x16(常に2バイト、値は「0x000x02」から「0xFF0xFF」に変更できます)
- (青)内容:LENGTHフィールドの10進値から2を引いた値で示されるバイト数。
この場合、LENGHTフィールドの値は22(0x00 0x16を10進数に変換)であるため、CONTENTには20(22-2)バイトが含まれます。私の目標は、各レコードを1つずつ読み取り、出力ファイルに書き込むことです。実際、私は読み取り関数と書き込み関数(いくつかの擬似コード)を持っています:
private void Read(BinaryReader binaryReader, BinaryWriter binaryWriter)
{
byte START = 0x5A;
int decimalLenght = 0;
byte[] content = null;
byte[] length = new byte[2];
while (binaryReader.PeekChar() != -1)
{
//Check the first byte which should be equals to 0x5A
if (binaryReader.ReadByte() != START)
{
throw new Exception("0x5A Expected");
}
//Extract the length field value
length = binaryReader.ReadBytes(2);
//Convert the length field to decimal
int decimalLenght = GetLength(length);
//Extract the content field value
content = binaryReader.ReadBytes(decimalLenght - 2);
//DO WORK
//modifying the content
//Writing the record
Write(binaryWriter, content, length, START);
}
}
private void Write(BinaryWriter binaryWriter, byte[] content, byte[] length, byte START)
{
binaryWriter.Write(START);
binaryWriter.Write(length);
binaryWriter.Write(content);
}
ご覧のとおり、私はすでにC#用に作成していますが、C++での作成方法がよくわかりません。誰かが私を正しい方向に向けてくれませんか?