gpt4 book ai didi

c - 如何添加十六进制数?

转载 作者:行者123 更新时间:2023-11-30 14:41:49 25 4
gpt4 key购买 nike

我有作业需要计算 INTEL HEX 的校验和。但我不知道如何添加十六进制数字。

char string[100] = ":10010000214601360121470136007EFE09D2190\n";
char hLength[5] = "0x", hHexSum[5] = "0x";
long length;
int i, hexSum = 0x0,x;

// We create hex format from first two numbers
hLength[2] = string[1];
hLength[3] = string[2];
hLength[4] = 0;

// Convert hex to dec number
length = (strtol(hLength, 0, 0))*2;
x = strlen(string);

// Add all hex numbers
for (i = 1; i <= (x-1); i++)
{
hHexSum[2] = string[i];
hHexSum[3] = string[i+1];
hHexSum[4] = 0;
printf("%d + %s ", hexSum, hHexSum);
hexSum = hexSum + hHexSum;
i = i + 1;
printf("DEC = %d; HEX = %x\n", hexSum, hexSum);
}

printf("%#08x\n", hexSum);

system("pause");
return 0;

现在输出:

0 + 0x10 DEC = 7338140; HEX = 6ff89c
7338140 + 0x01 DEC = 14676280; HEX = dff138
14676280 + 0x00 DEC = 22014420; HEX = 14fe9d4
... and more

但是如果我是对的,正确的输出应该是:

0 + 0x10 DEC = 16; HEX = 10
... and more

我不知道如何解决它。

//更新这很奇怪,但每次编译时我都会得到不同的十进制和十六进制值。

最佳答案

罪魁祸首是:

hexSum = hexSum + hHexSum;

hexSum 是一个整数,正确初始化为 0,直到出现为止...

但是hHexSum是一个char[5]。在上面的表达式中,它衰减为指向其第一个元素的指针,因此求和的结果是指向数组中索引 hexSum 的字符的指针,这不是您想要的。

您将该指针转换为整数并使用它,就好像它是预期的总和一样,但事实并非如此。顺便说一句,一个像样的编译器应该在此处针对将 .pointer 转换为整数而不进行强制转换发出警告。

在将字符串添加到 hexSum 之前,您应该使用 strtol 将字符串 hHexSum 正确转换为其整数 value .

关于c - 如何添加十六进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54731310/

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