我有一个字符串“0AAE0000463130004144430000”,我需要计算构成该字符串的十六进制字节的二进制补码校验和。
上面示例字符串的公式是
- 将值相加:0A + AE + 00 + 00 + 46 + 31 + 30 + 00 + 41 + 44 + 43 + 00 + 00 = 27(丢弃溢出)
- 从 0x100 = 0xD9 中减去结果
D9 是此示例的正确校验和,但我无法从 C# 中的字符串中解析出两位十六进制值。我当前的代码如下:
string output = "0AAE0000463130004144430000";
long checksum = 0;
char[] outputBytes = output.TrimStart(':').ToCharArray();
foreach (var outputByte in outputBytes)
{
checksum += Convert.ToInt32(outputByte);
checksum = checksum & 0xFF;
}
checksum = 256 - checksum;
但是,据我所知,这是对 ASCII 值求和,并对每个单独的字符进行求和。