0

生のバイナリ文字列から float を割り当てようとしていますが、期待どおりの結果が得られません。

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)

(私はエンディアンを認識しています。)

フロートを直接割り当てようとしましたが、出力として奇妙なものが得られます (すべての * はどういう意味ですか?)。

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]);
    tempFloat = (float*)(recBuffer + position);
    printf( "tempFloat=%f (0x%x)\n", *tempFloat, *tempFloat );
    return 0;
}

出力付き:

recBuffer=0x12345678
tempFloat=*************************************** (0x40000000)

0x78563412 = 1.73782443614495040019632524267E34 のように、任意のバイナリ シーケンスで出力が得られるはずです。なぜ 0x40000000 = *なのかわかりません。2.0E0 である必要があります。私は何を間違っていますか?! どんな助けでも大歓迎です!

(残念ながら、私は古い QNX マシンで作業しており、デバッガーはありません。単純な printf() だけが私を助けてくれます)。

4

2 に答える 2

0
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)
*/
于 2013-05-17T20:06:16.030 に答える