我从用户那里读取了一个十六进制字符串,然后我需要计算数字的总和(将它们分组在一起)并显示结果。我不明白为什么结果不准确。
printf("Enter a string:\n");
char str[38];
scanf("%s", str);
char hex [] = {"00"};
int sum = 0;
int i = 0;
int j = 0;
for (i = 0, j = 1 ; i < 37, j<38; i ++, j++){
hex[0]= str[i];
hex[1] = str[j];
sum += (int) strtol(hex, NULL, 16);
}
printf("%x", sum);
我输入了以下字符串:
137AF00A0D
...应该这样计算: 13 + 7A + F0 + 0A + 0A + 0D,但结果是3D8而不是19E。
你能帮我吗?
答案 0 :(得分:2)
您想要这个:
char hex[] = { "00" };
int sum = 0;
for (int i = 0; str[i] != 0; i += 2) {
hex[0] = str[i];
hex[1] = str[i + 1];
sum += (int)strtol(hex, NULL, 16);
}
printf("%x", sum);
保持简单,不要使它变得不必要的复杂。
答案 1 :(得分:1)
您的迭代是不必要的,也很不正确。您只需要一个迭代器,但是您应该在循环中每圈增加2个迭代器,因为您检查了2个字符。将代码简化为:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void)
{
char str[] = "AABBCCDD";
char hex[3] = {'\0'};
unsigned int sum = 0;
unsigned int length = strlen(str);
for (int i = 0; i<length; i+=2)
{
hex[0] = str[i];
hex[1] = str[i+1];
sum += strtol(hex, NULL, 16);
}
printf("%x", sum);
}
值得注意的是,对于错误的半字节数量,不正确的字符等,这没有错误处理。