C 将二进制转换为浮点

C 将二进制转换为浮点,c,floating-point,C,Floating Point,我试图从一个原始的二进制字符串中分配一个浮点,但是我没有得到我所期望的结果 int main() { char recBuffer[] = {0x44, 0x42, 0x96, 0x12, 0x34, 0x56, 0x78}; float tempFloat; int position = 3; printf( "recBuffer=0x%x%x%x%x\n", recBuffer[3], recBuffer[4], recBuffer[5], recBuffe

我试图从一个原始的二进制字符串中分配一个浮点,但是我没有得到我所期望的结果

int main()
{
    char recBuffer[] = {0x44, 0x42, 0x96, 0x12, 0x34, 0x56, 0x78};
    float tempFloat;
    int position = 3;

    printf( "recBuffer=0x%x%x%x%x\n", recBuffer[3], recBuffer[4], recBuffer[5], recBuffer[6]);
    memcpy( &tempFloat, recBuffer + position, 4 );
    printf( "tempFloat=%f (0x%x)\n", tempFloat, tempFloat );
    return 0;
}
我的输出如下所示:

recBuffer=0x12345678
tempFloat=*************************************** (0x40000000)
上述过程适用于整数:

int main()
{
    char recBuffer[] = {0x44, 0x42, 0x96, 0x12, 0x34, 0x56, 0x78};
    int tempFloat;
    int position = 3;

    printf( "recBuffer=0x%x%x%x%x\n", recBuffer[3], recBuffer[4], recBuffer[5], recBuffer[6]);
    memcpy( &tempFloat, recBuffer + position, 4 );
    printf( "tempFloat=%d (0x%x)\n", tempFloat, tempFloat );
    return 0;
}
具有输出:

recBuffer=0x12345678
tempFloat=2018915346 (0x78563412)
(我知道Endianness。)

我已经尝试直接分配浮点,但是我仍然得到一些奇怪的输出(所有*的意思是什么?)

输出:

recBuffer=0x12345678
tempFloat=*************************************** (0x40000000)
任何二进制序列都应该给我一个输出,如0x78563412=1.73782443614495040019632524267E34。我不知道为什么0x40000000=*。它应该是2.0E0。 我做错了什么?!任何帮助都将不胜感激

(不幸的是,我在一台旧的QNX机器上工作,没有调试器。只有简单的printf()来帮助我)


说明符对于整数很有用,但是您正在将一个
float
值传递给
printf
。因此,输出不是一个有意义的值。

我认为您指的是原始的“字节”字符串,而不是“二进制”
%x
格式不会打印
浮点
,因为调用
printf()
会自动将
浮点
转换为
双精度
(以及任何比
int
短的格式转换为
int
)。当您使用
%e
而不是
%f
时会发生什么?我得到:
recBuffer=0x12345678 tempFloat=***********************************************(1.737824e+034)
太棒了。这永远不是你所期望的。非常感谢,就这样
recBuffer=0x12345678 tempFloat=*****************************************(1.737824e+034)
我仍然不明白为什么%f会返回****,但我很高兴memcpy()能达到我的期望。谢谢你的帮助!%f仍然给我******,但使用您的建议:
printf(“tempFloat=%e(0x%x)\n”、tempFloat、*(unsigned*)&tempFloat)允许我获取原始十六进制值!:
recBuffer=0x12345678 tempFloat=1.737824e+034(0x78563412)
。这对我很有帮助,谢谢!
int main(){
    char recBuffer[] = {0x44, 0x42, 0x96, 0x12, 0x34, 0x56, 0x78};
    float tempFloat;
    int position = 3;

    printf( "recBuffer=0x%x%x%x%x\n", recBuffer[3], recBuffer[4], recBuffer[5], recBuffer[6]);
    memcpy( &tempFloat, recBuffer + position, 4 );
    printf( "tempFloat=%f (0x%x)\n", tempFloat, *(unsigned*)&tempFloat );
    return 0;
}
/*
recBuffer=0x12345678
tempFloat=17378244361449504000000000000000000.000000 (0x78563412)
*/
printf( "tempFloat=%d (0x%x)\n", tempFloat, tempFloat);
                          ^                     |
                          |                     |
                          +---------------------+
int main(){
    char recBuffer[] = {0x44, 0x42, 0x96, 0x12, 0x34, 0x56, 0x78};
    float tempFloat;
    int position = 3;

    printf( "recBuffer=0x%x%x%x%x\n", recBuffer[3], recBuffer[4], recBuffer[5], recBuffer[6]);
    memcpy( &tempFloat, recBuffer + position, 4 );
    printf( "tempFloat=%f (0x%x)\n", tempFloat, *(unsigned*)&tempFloat );
    return 0;
}
/*
recBuffer=0x12345678
tempFloat=17378244361449504000000000000000000.000000 (0x78563412)
*/