gpt4 book ai didi

在C中将大整数转换为 float

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

我最近写了一段代码,将来自用户的 8 位十六进制数作为输入,将其转换为整数,然后将其转换为 float 。要从整数到 float ,我使用以下命令:

int myInt;          
float myFloat;
myFloat = *(float *)&myInt;
printf("%g", myFloat);

它非常适合小数字。但是当用户输入十六进制数如:

0x0000ffff
0x7eeeeeef

我得到 myInt = -2147483648 和 myFloat = -0。我知道我为 myInt 得到的数字是可以存储在 C 中的 int 变量中的最小可能数字。

因为这个问题,我的程序的输入范围极其有限。有没有人对我如何扩展我的代码范围以使其能够处理大到这样的数字有任何建议:

0xffffffff

非常感谢您能给我的任何帮助!

最佳答案

float 所允许的那样准确地获取值(value)转移的正确方法是:

float myFloat = myInt;

如果您想要更高的准确性,请使用 double 而不是 float

您正在做的是尝试重新解释 int 的位模式,就好像它是 float 一样,这不是一个好主意。 C99 及更高版本中提供了十六进制浮点常量和转换。 (但是,如果您正在尝试这样做,那么您在问题中的代码是正确的 — 您的问题似乎在于将十六进制转换为整数。)

如果您从 0x0000FFFF(或从 0x7EEEFFFF)得到 -2147483648,则您的转换代码中存在错误。在做任何其他事情之前解决这个问题。你如何进行十六进制到整数的转换?使用strtol()可能是个好方法(和 sscanf() 和 friend 也是可能的),但要小心溢出。)

关于在C中将大整数转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533475/

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