我想使用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 long
和char
的存储方式不同,我知道我可以创建一个临时的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));
}
而且很有效
1条答案
按热度按时间yhived7q1#
代替
试试这个:
原因是将一个char写入一个long不仅仅是设置它的一个字节,更多的工作(例如清空其他字节,考虑字节序,等等)是通过C++显式的向上转换来完成的。