从文件中读取4个十六进制值并转换为float

时间:2015-04-15 01:30:02

标签: c++ binary

所以我一直在java中创建一个文件格式,但我知道我需要从C ++应用程序中读取该二进制文件。

二进制文件只包含大量由4个十六进制值表示的浮点数。

十六进制的示例数据: FF B6 DD 99 8D FF 39 61 0C 62 FF 42FF B6 DD 99是浮点数,8D FF 39 61是浮点数等等......

我如何一次读取文件4个十六进制值并转换为浮点数?

    std::fstream fRead;
    fRead.open("path");

    if (fRead.fail())
    {
        fRead.close();
    } 
    else 
    {
        char packetPart[3];

        while (true) 
        {
            fRead.read(packetPart, 4);
            //std::cout << std::hex << std::setw(2) << std::setfill('0') << int(packetPart[0]) << std::endl;
            //I was trying to display the hex value but it didn't work.
        }
    }

    fRead.close();

1 个答案:

答案 0 :(得分:2)

试试这个:

ifstream inp_file("path", ios::binary);
//...
float my_float = 0.0f;
inp_file.read((char *) &my_float, sizeof(my_float));

这仅在您的平台具有与Java实现相同的浮点实现时才有效。

顺便说一下,在你的代码中:

char packetPart[3];

while (true) 
{
    fRead.read(packetPart, 4);

您正在将4个字符读入3个字符的容量数组中。你应该问自己,&#34; 4个角色去哪了?&#34;。