【发布时间】:2016-03-24 02:48:26
【问题描述】:
我有一个包含以下十六进制值的数组:
A8, 00, 00, 11, 01, 44, 33, 28, 0C, 15, 2B, 00, 28, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF , 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF , 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF , 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF , 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF , 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF , 80, 7F, 00, 00, FF, 00, 00, 00, FE, FF, 80, 7F, 00, 00, 0C, 00, 03, 35, 00, 00, 00
我需要从他们那里计算一个校验和,我知道的结果是 C5。
我得到了以下信息,我只是将其视为模糊的提示:
校验和是通过对这些值求和得出的,结果也是“使用十六进制中最右边的字节”
所有数据总和的最低有效字节
添加 8 位宽的数据
如果您更喜欢十进制:
168, 0, 0, 17、1、68、51、40、12、21、43、0、40、 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 255, 0, 0, 0, 254, 255, 128, 127, 0, 0, 12, 0, 3, 53, 0, 0, 0
和十进制 checksum is 197
任何帮助将不胜感激。
编辑:
在回答RJM 的问题时,我基本上尝试循环遍历这些值并对LSB 和MSB 求和。如下:
int LSB = 0;
int MSB = 0;
foreach (Byte value in byteArray) {
LSB += (value & 1);
MSB += (value >> 7);
}
//Expected Checksum is 197
//LSB == 52
//MSB == 60
【问题讨论】:
-
你试过什么代码?
-
基本上我试图对每个字节的 LSB 和 MSB 求和,例如:
int LSB = 0; int MSB = 0; foreach (Byte value in byteArray) { LSB += (value & 1); MSB += (value >> 7); }