double FloatNumber= 13800100500;//转换成十六进制数应为:00 00 00 03 36 8C D2 94
u8 Disp[8];
问一下怎么把FloatNumber转换成十六进制数存在Disp[8]数组中?
u8 Disp[8];
问一下怎么把FloatNumber转换成十六进制数存在Disp[8]数组中?
解决方案
20
#include <stdio.h> #include <string.h> int main(void) { double FloatNumber= 13800100500; unsigned long long num = FloatNumber; unsigned char disp[8]; int i; printf("%lf\n", FloatNumber); printf("%llu\n", num); memcpy(disp, &num, 8); for (i = 8; i >= 0; i--) printf("%02X ", disp[i]); putchar(10); return 0; }
在内存中,不论是十进制还是16进制,甚至是8进制等等,都是二进制的形式存储的,即以010101这种方式存储的。之所以有10进制或16进制,而是输出到终端的形式不同而已;
在内存中,浮点数和无符号整数存储的方式不同,原因是浮点数有小数。所以,可以先把浮点数的整数部分给一个变量(这个变量需要能够存放这个浮点数的整数部分),然后在memcpy至一个8字节缓存里,最后以16进制形式输出。