gpt4 book ai didi

c - 在 C 中使用 union 将 double float 分解为字节

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

我是 C 编程的新手,所以请原谅任何编码失误等。

我定义了一个 union ,看起来像这样:

union meh {
double foo;
char bar[8];
};

然后我做这样的事情:

meh firstOne;
meh otherOne;

char blah[8];
double whatever;

firstOne.foo = 0.12345;
blah = firstOne.bar;

otherOne.bar = blah;
whatever = otherOne.foo;

我想弄清楚的是:'whatever' 等于 0.12345 吗?

(澄清一下 - sizeof(double) 在我的机器上是 8 个字节 - 不知道这是否适用于所有地方。)

我知道最明显的做法是运行它并亲自尝试,但不幸的是我无法做到这一点。我也对此处代码背后的机制感兴趣。

非常感谢您的时间和帮助 - 非常感谢!

编辑:从目前的评论看来,我是个白痴而且

blah = firstOne.bar;

应该是

strcpy(blah, firstOne.bar);

相反。对此感到抱歉!

最佳答案

是的,如果您修复错误,whatever 将是 0.12345。如果您有时间自己测试,这里有一些去丑化的示例代码:

#include <assert.h>
#include <string.h>

// use more descriptive names
union d2b
{
double value;
char bytes[sizeof (double)]; // avoid magic numbers
};

int main(void)
{
const double TEST_VALUE = 0.12345;

// don't omit the union keyword in C (not necessary in C++)
union d2b src, dest;
src.value = TEST_VALUE;

// arrays are not lvalues, ie you can't assign to array variables
// use memcpy() instead of strcpy() for arbitrary binary data
memcpy(dest.bytes, src.bytes, sizeof dest.bytes);

// assert, the foundation of test-driven development in C
assert(dest.value == TEST_VALUE);

return 0;
}

关于c - 在 C 中使用 union 将 double float 分解为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072238/

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