c++ 将读取字节存储到无符号长数组

h9a6wy2h  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(151)

我想使用istream::read和一个unsigned long数组,我希望结果就像我在使用char数组一样,但是结果会存储在unsigned long中。
示例:

std::ifstream foo("filename.txt", std::ios::binary);
//supose foo is 0x00 0x01 0x02 0x03 0x04 ...
unsigned long bar[256];
foo.read((char*)(&bar), 256); //bar[0] = 0x00, bar[1] = 0x01 ...
//each bytes of foo would be store in one item of bar.

但这显然不起作用,因为unsigned longchar的存储方式不同,我知道我可以创建一个临时的char数组,该数组将在unsigned long *中强制转换,但我希望直接使用unsigned long数组。
没有人知道我如何让它工作,而不创建一个临时的字符数组

    • 编辑**

在@Sam Varshavchik的建议下,我编写了以下代码:

ifstream file("filename;txt", ios::in | ios::binary);

unsigned long buffer[256];
for(unsigned i = 0; i < 256; ++i){
    file.read(reinterpret_cast<char*>(buffer + i), sizeof(char));
}

而且很有效

yhived7q

yhived7q1#

代替

file.read(reinterpret_cast<char*>(buffer + i), sizeof(char));

试试这个:

char out{};
file.read(&out, sizeof(char));
// make sure your data is never negative
buffer[i] = static_cast<unsigned long>(out);

原因是将一个char写入一个long不仅仅是设置它的一个字节,更多的工作(例如清空其他字节,考虑字节序,等等)是通过C++显式的向上转换来完成的。

相关问题