我正在尝试编写一个算法将十六进制数转换为浮点数,反之亦然。这是一个赋值的一部分,该程序应该接收一个以'0x'开始的8位十六进制数或浮点数,并且使用计算机内置的IEEE 754功能将该数字转换为十六进制或浮点数。代码应该在C.将十六进制转换为浮点数并反之亦然C
我的方法如下。用户将输入存储为字符串。将输入字符数组传递给一个方法,通过检查数组的前两个位置(它应该是0和X(假定所有十六进制数字以这种方式传递))来检查它是否是十六进制数字。如果是这种情况,那么我检查十六进制是否在适当的形式,即没有太多数字或0-15范围以外的数字(也考虑到ABCDEF约定)。
所以,我的问题是,我不知道如何将这个数组转换回一个数字,我可以用它来转换为浮点数。我想过使用sscanf把它变回浮动,但我不知道足够的C,并没有在网上找到任何好的来源
有人可以指出我在正确的方向吗?我也想过将用户输入同时存储为字符串和数字,但我不确定这是否可行。
下面是两种形式的检查功能和不完整的主要方法:
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'。 –
请注意,您需要执行'printf(“%lf”,f);''当'f'是一个'double' ... – Floris