正在从二进制文件中读取字节
Reading bytes from a binary file
我有一个二进制文件,需要从( x, y )
位置存储z
的字节数。例如,我得到了以下字节序列:
00000000 49 49 49 49 05 00 00 00 08 00 00 00 1a 00 00 00 | y0
00000010 39 a6 82 f8 47 8b b8 10 78 97 f1 73 56 d9 6f 00 | y1
00000020 58 99 d5 3b ac 7b 7b 40 b6 2e 9f 0a 69 b2 ac a0 | y2
________________________________________________________________
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15
每2个合并的数字代表1个字节(它取自hexdump-C-编码是一个小endian)。49
=1字节,f8
=1字节等等。。。
( x , y )
表示位置。例如,如果我把x=2,y=2,我得到位置( 2, 2 )
,这意味着我开始从位置y2,x2读取字节。在这种情况下,我从字节d5
开始。如果我放z = 3
,这意味着我想存储3个字节。在这种情况中,这些字节是d5, 3b, ac
。
我可以用一个简单的公式来计算位置:
position = 16 * y + x
position = 16 * 2 + 2 // i put x = 2, y = 2 to formula
position = 34 // get number 34, that means i will start storing at 35th byte in this case it's d5
binaryFile . seekg ( position ) // jump to position in a file ( itc it's 99 )
binaryFile . read ( ( char * )&dest, z )) // save z bytes
如果我放入z = 3
,我将存储3个字节:d5, 3b, ac
。
但有时系数z , x , y
不是整数:
如果我放y = 2, x = 1,5 and z = 3 // ( 1,5, 2 )
,这意味着我必须跳到字节而不是99
,而是d5
,然后在这种情况下存储2个字节d5 , 3b
,并将字节99
中的半个字节和字节ac
中的一半字节相加,因为起始位置是x = 1,5
。我怎么能那样做??
必须扩展到两端的字节边界,然后首先读取要写入的区域。所以,如果你想写两个字节,你就必须读三个字节。
然后,你必须进行适当的比特移位和掩蔽,以将你的比特放在正确的位置。
例如,如果你要写两个字节移位½字节的东西,你会从这样的东西开始:
unsigned char *mydata = MyDataToWrite();
unsigned char temp[bigEnough];
binaryFile.input(temp, 3);
temp[0] = (temp[0] & 0xf0) | (mydata[0] >> 4);
// more code here to put bits in temp
binaryFile.output(temp, 3);
在temp
中有了数据后,将3个字节写回读取的同一位置。
我不打算在这里写全部内容,但我希望这能给你一个可以在上工作的想法
相关文章:
- 在java中读取c++字节的位字段
- 从 C++ 中的标准输入迭代读取字节
- 写入/dev/ttyS0后读取0字节
- 提升 ASIO transfer_exactly读取 0 字节
- 读取字节后丢失指针
- 如何从文件中读取字节?C++
- AWS S3 CPP SDK读取字节多于指定的范围
- 从二进制文件中保存的 4 字节双精度读取 8 字节双精度
- 从 midi 文件读取字节时出现问题
- 串行读取字节 - Arduino 循环
- 将整数从处理发送到Arduino,无法读取字节
- 从文件到短 /长整数读取字节
- 使用C 中的字符指针从字符数组中读取字节
- 正在尝试读取4字节无符号整数的二进制文件并转换为伏特
- 从二进制文件中逐个读取字节
- 正在从二进制文件中读取字节
- 如何从无符号变量写入和读取字节
- 使用 ifstream 读取字节
- 从串行设备读取字节(并理解它们??)
- 如何从一个套接字读取' 1 '字节,而从另一个套接字读取' read_some '字节