【发布时间】:2014-01-24 02:07:21
【问题描述】:
我正在尝试编写一个算法来将十六进制数转换为浮点数,反之亦然。这是作业的一部分,程序应该接收以“0x”开头的 8 位十六进制数或浮点数,并使用计算机的“内置 IEEE 754 功能”将数字转换为十六进制或浮点数。代码应该在 C 中。
我的方法如下。将用户的输入存储为字符串。将输入 char 数组传递给一个方法,该方法通过检查数组的前两个位置(应该是 0 和 X)来检查它是否是十六进制数(假设所有十六进制数都以这种方式传递)。如果是这种情况,那么我会检查十六进制的格式是否正确,即 0-15 范围之外的数字或数字不要太多(也考虑到 ABCDEF 约定)。
所以,我的问题是,我不知道如何将这个数组转换回我可以用来转换为浮点数的数字。我考虑过使用 sscanf 将其转回浮点数,但我对 C 的了解不够,也没有在网上找到任何好的资源
有人能指出我正确的方向吗?我还考虑过将用户输入同时存储为字符串和数字,但我不确定这是否可行。
这里有两个表单检查函数和不完整的main方法:
int is_hex(char arr[])
{
if (arr[0] == '0' && (arr[1] == 'x' || arr[1] == 'X')) {
return 1;
}
return 0;
}
int check_if_good(char arr[])
{
if (is_hex(arr)) {
int len = strlen(arr);
for (int i = 2; i < len; i++) {
if ((arr[i] > 'f' && arr[i] <= 'z') || (arr[i] > 'F' && arr[i] <= 'Z')) {
return 0;
}
}
}
return 1;
}
int main(int argc, const char * argv[])
{
float x;
char input[30];
scanf("%s", input);
printf("%s", input);
return 0;
}
如果有人也能告诉我'%x' 的基本含义,我将不胜感激。据我了解,它可以让我以十六进制形式收集数字,但我可以将它们存储在整数和浮点数中吗?非常感谢您的帮助。
--编辑:floris 的额外代码。我试图在不使用任何额外库的情况下解决这个问题,所以你不能使用 stdint 库。
char input[30];
scanf("%s", input);
if(check_if_good(input)){ //Ignore this if-statement.
printf("Input is in hex form");
}
int num = convert_hex_string(input); // this function works perfectly. It return the int form of the hex.
double f = *((double*)&num);
printf("%f\n", f);
【问题讨论】:
-
"%x" 表示您写入数字的十六进制值。例如
unsigned char i = 10; printf("%x", i);将给出a。 -
请注意,当
f是double时,您需要执行printf("%lf", f);...
标签: c arrays floating-point hex