我正在研究从一个平台到另一个平台的32位浮点数。那么它只允许将16位unsinged int成员传递给transfter寄存器。我想我可以将32位浮点分成两个16位然后再转换到另一侧的32位。
(我正在使用C语言)
像:
float A = 3.14
uint16_t B = A & 0xffff;
uint16_t C = A & 0xffff0000;
float D = C<<16 & B;
Obevious这是不正确的,因为float数据在分配时将转换为unsigned int。那我该怎么办呢?做一些类似的事情会有一些相当成熟的方法
由于
答案 0 :(得分:5)
您可以使用联合,例如:
typedef union {
float f;
uint16_t a[2];
} U;
U u;
u.f = 3.14f;
printf("%g -> %#x %#x\n", u.f, u.a[0], u.a[1]);
注意:严格来说这是未定义的行为,但它是一种广泛使用的技术,它不太可能失败。或者,您可以采用更安全但可能效率稍低的方法,并使用memcpy,如下所示:
float f = 3.14f;
uint16_t a[2];
memcpy(a, &f, sizeof(a));
printf("%g -> %#x %#x\n", f, a[0], a[1]);