【问题标题】:Sum from an Array of Hex values to compute Checksum not working从十六进制值数组中求和以计算校验和不起作用
【发布时间】: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); }

标签: c# hex checksum


【解决方案1】:

感谢向我提供了更多信息,我可以发布解决方案。

int chk = 0;
foreach (Byte value in byteArray) {
    chk += value;
}
chk = (chk & 255); 

所以,基本上我需要对所有字节求和,然后使用结果的 LSB。

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2017-08-24
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多