从文件中读取4个十六进制值并转换为浮点值 我一直在用java创建文件格式,但是我知道我需要从C++应用程序中读取二进制文件。

从文件中读取4个十六进制值并转换为浮点值 我一直在用java创建文件格式,但是我知道我需要从C++应用程序中读取二进制文件。,c++,binary,C++,Binary,二进制文件只包含大量由4个十六进制值表示的浮点数 十六进制格式的示例数据: FF B6 DD 99 8D FF 39 61 0C 62 FF 42,FF B6 DD 99是浮点,8D FF 39 61是浮点,依此类推 如何一次读取文件中的4个十六进制值并将其转换为浮点值 std::fstream fRead; fRead.open("path"); if (fRead.fail()) { fRead.close(); } els

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

十六进制格式的示例数据:
FF B6 DD 99 8D FF 39 61 0C 62 FF 42
FF 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();
std::fstream-fRead;
fRead.open(“路径”);
if(fRead.fail())
{
fRead.close();
} 
其他的
{
字符包部分[3];
while(true)
{
fRead.read(包装件第4部分);
//std::cout试试这个:

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个字符的容量数组中。您应该问自己,“4个字符去哪里了?”.

数据实际上是二进制数据还是十六进制表示形式的ascii字符?换句话说,文件的外观是否精确?还是文件内容的十六进制表示形式?首先,将四个字节读入三个字节的数组中。此外,文件中的数据是否为文本数据,例如可读字符串
“FF B6 DD 99 8D FF 39 61 0C 62 FF 42”
?还是二进制文件?如果是二进制文件,则需要以二进制模式打开该文件。如果是文本文件,则还需要处理数字之间的空格。不,数据不是文本数据,而是二进制数据。