从二进制文件中读取 unsigned long

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女巫应该被读取,1483469418106在我的代码中它只是数据的第一个字节

问题是什么?
我应该如何正确读取unsigned long来自文件的内容?

luk*_*k32 5

那是因为您正在转换一个取消引用的值。即只有一个char不完整的 4 个字节。*U106

您可以在没有中间缓冲区的情况下读取数据:

infile.read(reinterpret_cast<char*>(&out), sizeof out);

不同之处在于,您在这里重新解释了指针,而不是它下面的值。

如果你还想使用缓冲区,应该是*reinterpret_cast<unsigned long*>(U);,这也会重新解释第一个指针,然后取消引用它。关键是取消引用正确类型的指针。指针的类型决定了该值使用了多少字节。