我试图计算一个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;
}

09-06 05:03