【发布时间】:2012-12-24 20:00:31
【问题描述】:
大家好!我正在尝试读取文件的前 4 个字节并将它们存储在整数变量中。 这就是我正在做的事情:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
int main(){
ifstream is;
is.open ("binary_file.dat", ios::binary );
char file_version[4];
is.read(file_version, 4);
int fv_int;
memcpy(&fv_int, file_version, sizeof(fv_int));
cout << fv_int;
}
但结果并不是我想的那样。程序将文件的第一个字节复制到正确的位置,但将其余字节视为 0。示例:
我的文件的前 4 个字节:
10101010 00101100 00101100 00101100
程序执行后fv_int的内容是什么:
10101010 00000000 00000000 00000000
有没有办法访问特定的整数字节?还是从文件中读取字节的更好方法?
【问题讨论】:
-
你就不能
is.read(&fv_int, 4);吗?另外,你为什么假设int是 4 个字节长? -
您应该使用
int32_t(来自 stdint.h)而不是 int,因为 int 的大小因平台而异。这可能无法解决您的问题,但它会使您的代码更具可移植性。 -
@H2CO3: C++ std::istream::read() 需要一个指向 char 的指针。悲伤但真实。
-
@JohnZwinck 该死的 C++ 的严格类型系统。
-
感谢@JohnZwinck 的建议