读几个字节,跳过N个字节,然后再读几个字节。如何?

2024-03-06

我有一个二进制文件 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 复制到 data[720] 。但这看起来真的很愚蠢。所以我想问一下

  1. 如何将数据读取到字符数组的特定位置?

    a1.read(tmp[2],2) // 不允许,如何实现?

  2. 怎样才能跳过某一天呢?

    a1.read(tmp16,16);我可以用它来跳转 16 个字节,而不必使用 tmp16,但它看起来很难看。


我相信ignore http://en.cppreference.com/w/cpp/io/basic_istream/ignore是要走的路。

You go.

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
  1. 忽略第一个 16 字节
  2. 你可以去data这里,因为它是缓冲区第一个字节的地址,本质上与&data[0]相同
  3. 跳过下一个不需要的字节
  4. 这将获取并传递地址data[256-16+1]作为要读入的缓冲区。清楚的data[17]只会从那里获取一个值,而&运算符获取其地址。我放256-16因为这是在上一次调用中读取的字节数,我们希望从下一个可用空间开始读取。编号从0就是这个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读几个字节,跳过N个字节,然后再读几个字节。如何? 的相关文章

随机推荐