我有一个二进制文件a.bin,其中包含768个字节。
我想将字节16-256,272-512,528-768放入
char data[720]
我做了一些像
ifstream a1;
a1.open("a.bin", ios::in|ios::binary)
char tmp[256]
a1.read(tmp,256)
然后我做了一些循环并将tmp复制到逻辑中的数据[720]。但这看起来真的很愚蠢。所以我想问一下
如何将数据读取到特定的某个位置?
a1.read(tmp [2],2)//不允许,如何实现这个目标?
我怎样才能跳过某一天?
a1.read(tmp16,16);我可以使用它来跳16个字节并且neve使用tmp16,但它看起来很难看。
答案 0 :(得分:6)
对于第一个问题:
a1.read(&tmp[2], 2);
将两个字节读入tmp[2]
和tmp[3]
。
关于第二个问题:
a1.ignore(10);
跳过10个字节。
答案 1 :(得分:4)
我相信ignore是要走的路。
你去。
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
data
,因为它是缓冲区的第1个字节的地址,与& data [0] data[256-16+1]
的地址作为要读入的缓冲区。普通data[17]
只会从那里获取值,而&
运算符会获取其地址。我把256-16
放在那里因为这是在前一个调用中读取的字节数,我们想要在下一个可用空间开始读取。从0
编号就是这个。答案 2 :(得分:1)
要读取数组中的某个点,您需要为其指定地址
a1.read(tmp+2, 2)
或者你可以做到
a1.read(&tmp[2], 2) // the & operator is the address of operator
答案 3 :(得分:0)
要设置要在流中读取的位置,请使用seekg
。