gpt4 book ai didi

将一个 32 位 float 转换为两个 16 位 uint 数,然后再次转换回那个 32 位 float

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:52 25 4
gpt4 key购买 nike

我正在努力将一个 32 位 float 从一个平台传输到另一个平台。那么它只允许将 16 位 unsinged int 成员传递给传输寄存器。我在想,然后我可以将 32 位 float 分成两个 16 位,然后在另一侧再次转换为 32 位。

(我用的是C语言)

喜欢:

float A = 3.14
uint16_t B = A & 0xffff;
uint16_t C = A & 0xffff0000;

float D = C<<16 & B;

显然这是不正确的,因为 float 数据在分配时将被转换为 unsigned int。那我平时应该怎么做呢?应该会有一些比较成熟的方法来做类似的事情

谢谢

最佳答案

你可以为此使用 union ,例如:

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]);

LIVE DEMO

注意:严格来说这是未定义的行为,但它是一种广泛使用的技术,不太可能失败。或者,您可以采用更安全但效率可能较低的方法,只需使用 memcpy,如下所示:

float f = 3.14f;
uint16_t a[2];
memcpy(a, &f, sizeof(a));
printf("%g -> %#x %#x\n", f, a[0], a[1]);

LIVE DEMO

关于将一个 32 位 float 转换为两个 16 位 uint 数,然后再次转换回那个 32 位 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26012374/

25 4 0