最近有个项目,要求把float类型数据,使用十六进制传到服务器,发现经过snprintf后,mcu小端字节序改为了大端字节序。因此写了这个测试函数,确认是否是snprintf改变了字节序。
#include <stdio.h>
#include <string.h>
typedef union data_s
{
float f;
unsigned char str[4];
unsigned int num;
} data_t;
int main()
{
data_t d = {0};
char arr[32] = {0};
d.f = 21.875;
snprintf(arr, 32 ,"%X", d.num);
/* Write C code in this online editor and run it. */
printf("float len: %ld union len: %ld\n", sizeof(d.f), sizeof(d));
printf("%02X,%02X,%02X,%02X\n", d.str[0], d.str[1], d.str[2], d.str[3]);
printf("arr: %s\n", arr);
return 0;
}
运行结果
$gcc -o main *.c -lm
$main
float len: 4 union len: 4
00,00,AF,41
arr: 41AF0000
文章描述了一个项目中,将float类型数据通过snprintf转换为十六进制时,MCU从小端字节序变为大端字节序的问题,作者提供了测试代码并展示了结果。

1615

被折叠的 条评论
为什么被折叠?



