我有一个二进制文件,a.bin,其中包含768个字节.
我想把字节16-256,272-512,528-768放进去
char data[720]
Run Code Online (Sandbox Code Playgroud)
我做了一些喜欢的事情
ifstream a1;
a1.open("a.bin", ios::in|ios::binary)
char tmp[256]
a1.read(tmp,256)
Run Code Online (Sandbox Code Playgroud)
然后我做了一些循环并将tmp复制到逻辑中的数据[720].但这看起来真的很愚蠢.所以我想问一下
如何将数据读取到特定的某个位置?
a1.read(tmp [2],2)//不允许,如何实现?
我怎么能跳过某一天?
a1.read(tmp16,16); 我可以使用它来跳16个字节并且neve使用tmp16,但它看起来很难看.
对于第一个问题:
a1.read(&tmp[2], 2);
Run Code Online (Sandbox Code Playgroud)
将两个字节读入tmp[2]
和tmp[3]
.
对于第二个问题:
a1.ignore(10);
Run Code Online (Sandbox Code Playgroud)
跳过10个字节.
我相信忽视是要走的路。
你走。
a1.ignore(16); // [1]
a1.read(data, 256-16); // [2]
a1.ignore(272-256); // [3]
a1.read(&data[256-16], 512-272); // [4]
// and so on
Run Code Online (Sandbox Code Playgroud)
data
此处使用,因为它是缓冲区的第一个字节的地址,本质上与&data [0]相同data[256-16+1]
作为要读取的缓冲区。Plain data[17]
将从那里取一个值,而&
operator取其地址。我输入的256-16
原因是上一次调用中读取的字节数,我们想在下一个可用空间开始读取。从0
这里开始编号。