最近有个项目,要求把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