Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C+中的二进制文件中读取32位整数+;?_C++_File_Fstream - Fatal编程技术网

C++ 从C+中的二进制文件中读取32位整数+;?

C++ 从C+中的二进制文件中读取32位整数+;?,c++,file,fstream,C++,File,Fstream,我的二进制文件如下所示 00000000: 0000 0803 0000 ea60 0000 001c 0000 001c 00000010: 0000 0000 0000 0000 0000 0000 0000 0000 左栏是地址 我只是试着读一下0000 0803(=2051),如下所示 ifstream if; if.open("file"); uint32_t a; if >> a; 正如所料……它没有起作用:-( a执行后仅为0。 我尝试了long,int,unsig

我的二进制文件如下所示

00000000: 0000 0803 0000 ea60 0000 001c 0000 001c
00000010: 0000 0000 0000 0000 0000 0000 0000 0000
左栏是地址

我只是试着读一下
0000 0803
(=2051),如下所示

ifstream if;
if.open("file");
uint32_t a;
if >> a;
正如所料……它没有起作用:-(
a执行后仅为0。
我尝试了
long,int,unsigned int,unsigned long
。全部失败

为什么这些都不起作用,我如何才能实现目标?

您有两个问题:

  • 确保从流中读取您想要的字节(不少于,不多于)

    我建议使用以下语法:

    uint32\u t a;

    infle.read(重新解释铸件(&a),尺寸(a));

  • 确保以正确的字节顺序解释这些字节

    问:如果你在电脑上,你的CPU可能是。你知道你的数据流也是小端还是大端

    如果数据是大Endiad,我会考虑标准的网络函数来满足字节顺序:<代码> ntoHLL()/<代码>等:

  • 此外:


    遵循Hcorg和Daniel Jour的建议:不要忘记“打开模式”参数,也不要忘记检查“文件打开”错误。

    以二进制模式打开文件,然后使用
    read()
    方法,类似于:

    uint32\u t a;
    ifstream文件(“文件”,ios::in | ios::binary);
    if(file.is_open())
    {
    file.read((char*)&a,sizeof(a));
    }
    
    您是否检查了文件是否正确打开?读取后流的状态是什么?(失败或错误状态?)还记得关于打开模式-打开的第二个参数()。您需要知道保存文件时使用了什么endianness。Little endian(例如Intel x86):最低地址上的最低有效字节,Big endian(例如互联网):最低地址上的最高有效字节。如果您在Intel PC上从LeCun读取MNIST图像数据集,则需要颠倒@ErikAlapäa提到的字节顺序。@请注意:如果
    不是
    ifstream
    变量的有效名称,则可能
    。实际上,有3个问题:他需要读取数据的十六进制ecimal也是,这可能是最大的问题。最好解释一下关于第一个问题的一些原因。(=你为什么推荐
    read
    函数,而不是输入流?)为什么
    >>
    不起作用?这是一种记录在案的行为吗?@zhangxaochen>>正在寻找数字的ASCII表示形式,读取42它希望在流“4”和“2”中看到0x34、0x32,而不是0x2a错误:无法用类型为“int32\u t*”的右值初始化类型为“char\u type*”(又名“char*”)的参数(又名“int*).怎么办?@LRDPRDX关于“什么”怎么办?您是否对您的案例提出了问题并提供了一个示例?(在我的代码段中,没有转换为字符,也没有初始化)。我只是试图编译您的代码段。上面打印的错误。@LRDPRDX我没有机会检查(在Galaxy No.3中没有Android的C++编译器)……但它是指针类型转换的绝对问题。尝试为<代码>和A< <代码>添加显式转换:<代码>文件。