gpt4 book ai didi

c - 为什么我的十六进制转换功能差了一个?

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

我正在尝试学习 c 并且很困惑为什么我的十六进制到整数转换函数返回的值相差一个。

注:0XAAAA == 46390

#include <stdio.h>
#include <math.h>

unsigned int hex_to_int(char hex[4]);

int main()
{
char hex[4] = "AAAA";

unsigned int result = hex_to_int(hex);
printf("%d 0X%X\n", result, result);
return 0;
}

unsigned int hex_to_int(char input[4])
{
unsigned int sum, i, exponent;

for(i = 0, exponent = 3; i < 4; i++, exponent--) {
unsigned int n = (int)input[i] - 55;
n *= pow(16, exponent);
sum += n;
}
return sum;
}

输出:

46391 0XAAAB

更新:我现在意识到“- 55”是荒谬的,看到这个我已经失忆了:

if (input[i] >= '0' && input[i] <= '9')
val = input[i] - 48;
else if (input[i] >= 'a' && input[i] <= 'f')
val = input[i] - 87;
else if (input[i] >= 'A' && input[i] <= 'F')
val = input[i] - 55;

最佳答案

您有几个错误,例如字符串没有以空值终止,ASCII 到十进制的转换是无意义的(值 55?),您没有初始化 sum 等等。只需这样做:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char x[] = "AAAA";

unsigned int sum = strtoul(x, NULL, 16);
printf("%d 0X%X\n", sum, sum);
return 0;
}

编辑

如果您坚持手动执行此操作:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

unsigned int hexstr_to_uint(const char* str);

int main()
{
char x[] = "AAAA";

unsigned int sum = hexstr_to_uint (x);
printf("%d 0X%X\n", sum, sum);
return 0;
}

unsigned int hexstr_to_uint(const char* str)
{
unsigned int sum = 0;

for(; *str != '\0'; str++)
{
sum *= 16;
if(isdigit(*str))
{
sum += *str - '0';
}
else
{
char digit = toupper(*str);
_Static_assert('Z'-'A'==25, "Trash systems not supported.");
if(digit >= 'A' && digit <= 'F')
{
sum += digit - 'A' + 0xA;
}
}
}
return sum;
}

关于c - 为什么我的十六进制转换功能差了一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47828836/

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