大家好,欢迎来到IT知识分享网。
1、浮点数转十六进制
将浮点数转换为字节数组(byte array),有两种方法。
a、使用类型转换
float a = 0.156; unsigned char byte_arr[sizeof(float)]; unsigned char* p = (unsigned char*)&a; for (int i=0; i<sizeof(float); i++) { byte_arr[i] = *(p+i); }
这里,我们首先定义了一个与浮点数占用的内存空间大小相同的 unsigned char 数组 byte_arr。接下来,我们通过将浮点数的地址强制转换为指向 unsigned char 类型的指针,将浮点数 a 的每个字节逐个复制到 byte_arr 中。
b、使用memcpy 函数
float a = 0.156; unsigned char byte_arr[sizeof(float)]; memcpy(byte_arr, &a, sizeof(float));
这里,我们同样定义了一个与浮点数占用的内存空间大小相同的 unsigned char 数组 byte_arr。再利用 memcpy 函数,将浮点数 a 的内存内容复制到 byte_arr 中。由于 memcpy 函数的第二个参数需要一个指向 void 类型的指针,因此我们使用了取地址符 & 对浮点数进行了取地址操作。
2、十六进制转浮点数
a、使用类型转换
unsigned char byte_arr[] = {0x77, 0xBE, 0x1F, 0x3E}; float a; unsigned char* p = (unsigned char*)&a; for (int i=0; i<sizeof(float); i++) { *(p+i) = byte_arr[i]; }
这里,我们首先定义了一个字节数组 byte_arr,它的值为 0.156 的十六进制。接下来,我们声明一个浮点数变量 a,并将其地址强制转换为指向 unsigned char 类型的指针 p。然后,我们通过遍历字节数组 byte_arr,逐个复制字节到浮点数 a 的内存空间中,从而将字节数组转换为浮点数。
b、使用memcpy 函数
unsigned char byte_arr[] = {0x77, 0xBE, 0x1F, 0x3E}; float a; memcpy(&a, byte_arr, sizeof(float));
这里,我们同样定义了一个字节数组 byte_arr,它的值为 0.156 的 十六进制。再利用 memcpy 函数,将字节数组中的内容复制到浮点数 a 的内存空间中,从而将字节数组转换为浮点数。
3、总结
注意
在一般情况下,浮点数的转换成数组并没有具体的大端或小端的概念。大端和小端是指在处理多字节数据时的字节序(byte order),而不同的字节数组转换方式可能存在不同的字节序。
对于普通的单精度浮点数(32位),可以将其转换为4字节的字符数组。这样转换时,每个字节的顺序是固定的,以首字节为最高有效字节(Most Significant Byte, MSB)的形式存储在数组中,这种方式被称为大端字节序。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121284.html