我试图计算一个ASCII十六进制值数组的校验和。
假设我有以下
char exArray[] = "3030422320303030373830434441453141542355";
这是20对十六进制值,每一对代表一个ASCII字符(例如0x41=A)。
我怎样才能把它们分开来计算一个校验和呢?
或者,如何将数组中的两个值合并为一个值?
(例如“4”、“1”->“41”)
最佳答案
@pmg公司:
第一步是将字符串表示形式(十六进制)转换为整数。
对于第二部分,请尝试('4'-'0')*16+('1'-'0')
这最终做到了,爱是多么的简单,
我的实现现在看起来有点像这样。
uint8_t t = 0, tem, tem2, sum;
uint32_t chksum = 0;
void checkSum(void)
{
while (t < 40)
{
asciiToDec(exArray[t]);
tem = global.DezAscii[0];
t++;
asciiToDec(exArray[t]);
tem2 = global.DezAscii[0];
t++;
sum = (tem) * 16 + (tem2);
chksum += sum;
}
}
void asciiToDec(uint8_t value)
{
if (value == 'A')
global.DezAscii[0] = 10;
else if (value == 'B')
global.DezAscii[0] = 11;
else if (value == 'C')
global.DezAscii[0] = 12;
else if (value == 'D')
global.DezAscii[0] = 13;
else if (value == 'E')
global.DezAscii[0] = 14;
else if (value == 'F')
global.DezAscii[0] = 15;
else
global.DezAscii[0] = value;
}