gpt4 book ai didi

c - 为什么这只打印 0?

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:26 24 4
gpt4 key购买 nike

C 的新手,我一直在尝试使用这段代码转换十六进制输入。我一直给它的输入 argv[1] 是 0xabcd123。它只给了我 0 个输出。我也尝试过使用 atoi 以及改变输出类型。为什么它只打印0?这是代码,谢谢

#include <stdio.h>
#include <stdlib.h>
typedef union{
double num;
float f;
} U;
int main(int argc, char*argv[])
{

U u;
u.num = strtod(argv[1], NULL);
printf("%e\n", u.f);
return 0;
}

结果取决于平台!

最佳答案

我相信它在一个系统上返回 0 是因为字节顺序。当您将值作为 double 写入但随后将其作为 float 读取时,您可能正在读取 double 的上半部分或下半部分,具体取决于体系结构。在一个系统上,它是 double 的空上半部分,在另一个系统上,它是包含值的下半部分。

无论哪种方式,对于 union ,您都不应期望将任何值作为一种类型写入,然后作为另一种类型读回并获得可靠的结果。正如您所发现的 :) union 不是神奇的类型转换器,当您知道您一次只有一种类型的值时,它们只是让您节省空间。

关于c - 为什么这只打印 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21566996/

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