J'essaie d'assigner un fichier flottant à partir d'une chaîne binaire brute, mais je ne comprends pas ce à quoi je m'attendrais.Convertir un fichier binaire en fichier flottant
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;
}
Ma sortie ressemble:
recBuffer=0x12345678
tempFloat=*************************************** (0x40000000)
La procédure ci-dessus fonctionne pour les entiers:
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;
}
avec une sortie:
recBuffer=0x12345678
tempFloat=2018915346 (0x78563412)
(je suis au courant Endianness.)
J'ai essayé d'assigner le flottant directement, mais j'ai quand même quelque chose de bizarre en sortie (que signifient tous les *)?
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;
}
avec sortie:
recBuffer=0x12345678
tempFloat=*************************************** (0x40000000)
Toute séquence binaire doit me donner une sortie, comme 0x78563412 = 1.73782443614495040019632524267E34. Je ne suis pas sûr pourquoi 0x40000000 = *. Ça devrait être 2.0E0. Qu'est-ce que je fais de mal ?! Toute aide serait appréciée!
(malheureusement, je travaille sur une vieille machine QNX, sans débogueur. Il suffit simplement printf() 's pour me aider le long).
Je pense que vous voulez dire chaîne "byte" brut, non "binaire" – Mike
Le format '% en x' ne sera pas imprimer la' float' parce que l'appel à 'printf()' convertit automatiquement le 'float' à un 'double' (et quelque chose de plus court que' int' à 'int'). Que se passe-t-il lorsque vous utilisez '% e' au lieu de'% f'? –
je reçois: 'recBuffer = 0x12345678 tempFloat = ************************************** * (1.737824e + 034) ' Incroyable. Ce n'est jamais où vous vous attendez. Merci beaucoup. –