RYN*_*RYN 4 c++ binaryfiles readfile
我正在尝试unsigned long从二进制文件中读取一个数字。
我是这样做的:
infile.open("file.bin", std::ios::in | std::ios::binary);
char* U=new char[sizeof(unsigned long)];
unsigned long out=0;
infile.read(U, sizeof(unsigned long));
out=static_cast<unsigned long>(*U);
delete[] U;
U=NULL;
infile.close();
Run Code Online (Sandbox Code Playgroud)
但结果不正确。
我的数据是6A F2 6B 58 00 00 00 00女巫应该被读取,1483469418但106在我的代码中它只是数据的第一个字节
问题是什么?
我应该如何正确读取unsigned long来自文件的内容?
那是因为您正在转换一个取消引用的值。即只有一个char不完整的 4 个字节。*U是106。
您可以在没有中间缓冲区的情况下读取数据:
infile.read(reinterpret_cast<char*>(&out), sizeof out);
不同之处在于,您在这里重新解释了指针,而不是它下面的值。
如果你还想使用缓冲区,应该是*reinterpret_cast<unsigned long*>(U);,这也会重新解释第一个指针,然后取消引用它。关键是取消引用正确类型的指针。指针的类型决定了该值使用了多少字节。
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |