c++ - 从二进制文件中读取 unsigned long

标签 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();

但结果不正确。
我的数据是 6A F2 6B 58 00 00 00 00 女巫应该读作 1483469418 但在我的代码中输出是 106 这只是第一个数据字节

问题是什么?
我应该如何从文件中正确读取 unsigned long

最佳答案

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

无需中间缓冲区就可以读入数据:

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

不同的是,这里你重新解释指针,而不是它下面的值。

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

关于c++ - 从二进制文件中读取 unsigned long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454413/

相关文章:

在R中读取不同目录下的多个文件

c++ - 具有常量法线的 glDrawElements

c++ - 包含对自身或其他结构类型的引用的结构?

c++ - 使用 opencv 以 ycbcr 格式拍摄并保存图像

shell - 以十六进制序列递归搜索二进制文件的目录?

postman - 在 Postman 中,如何使用 collection runner POST 二进制文件

c++ - 使用二进制文件进行简单的高分更新

list - 从文件中读取行到 erlang 中的列表,忽略\n

javascript - 从本地文件运行时 $.get() 无法正常工作

c++ - std::unordered 映射不以哈希值的递增顺序存储条目