Я пытаюсь назначить поплавок из исходной двоичной строки, но я не понимаю, чего бы я ожидал.Преобразование двоичных данных в 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)
(я знаю Endianness.)
Я попытался назначить поплавок напрямую, но я все еще получаю что-то странное как результат (что означают все * *?).
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() помочь мне).
Я думаю, что вы имеете в виду сырые «байты» строку, а не «двоичный» – Mike
Параметр '% формат x' не будет печатать' float', потому что вызов 'Е()' автоматически преобразует 'float' к «double» (и чем короче, чем 'int' to' int'). Что происходит, когда вы используете '% e' вместо'% f'? –
Я получаю: 'recBuffer = 0x12345678 tempFloat = ************************************** * (1.737824e + 034) ' Удивительно. Это никогда не бывает так, как вы ожидали. Огромное спасибо. –