gpt4 book ai didi

c - 将浮点值存储在 uint32_t 指针中

转载 作者:行者123 更新时间:2023-12-02 09:22:17 24 4
gpt4 key购买 nike

我想在我的 TI MSP430 微 Controller 的 FRAM 寄存器中存储一些浮点数据并且有一些问题。

我不知道我怎么能做到这一点。

使用普通整数变量没有问题。

普通整数变量:

void main()
{
uint32_t value = 25;
uint32_t framPtr = 0xD000;

FRAMC_write_uint32_t(value, (uint32_t*)framPtr);
}

void FRAMC_write_uint32_t(uint32_t value,
uint32_t *framPtr)
{
*framPtr = value;
}

但是对于浮点值它不起作用。我试图将函数内的值更改为 float ,但没有结果。

这是我的 float 数据:
    float value = 1.25;
uint32_t framPtr = 0xD000;

使用此功能不起作用:
void FRAM_write_float(float value,
uint32_t *framPtr)
{
*framPtr++ = (float)value;
}

它在我的内存库中保存了数据 1.40129846e-45 (DEN) (HEX: 0x00000001)。

我希望有人能帮助我解决我的问题。
谢谢!

最佳答案

重新解释这些位的最简单方法是使用 memcpy , 如果你知道 sizeof(float) == sizeof(uint32_t) 1

float f = /* some_val */;
uint32_t fbits = 0;
memcpy(&fbits, &f, sizeof fbits);
应该足够安全,因为无符号整数通常没有陷阱值。
如果您的编译器支持 C99 及更高版本。您还可以通过 union 进行类型双关。
union {
float from;
uint32_t to;
} pun = { .from = /*some val*/ };

// use pun.to
以上实际上并没有复制任何东西,所以在一个紧密的循环中可能会稍微快一点。 (正如 Olaf 指出的,这是 现代 C 的标准兼容方式)。

1:如果你的编译器支持它,你应该 _Static_assert 在上面。

关于c - 将浮点值存储在 uint32_t 指针中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41661029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com