我正在使用超终端,并试图发送字符串到6位数记分板。制造商给我发了一个样本字符串来测试,它可以工作,但为了能够改变显示的信息,我被告知要计算一个新的Checksum值。
样本字符串是:&AHELLO N-12345\71。
字符A和N是记分牌的地址(允许通过一个RS232连接使用两个显示器)。HELLO和-12345是显示的字符。71 "是我被卡住的地方。
如何从 "AHELLO N-12345 "中获得71?
在随记分板提供的文献中,样本字符串中的 "71 "被描述为对字符 "AHELLO N-12345 "进行逐个字符的逻辑XOR运算。然而,制造商却称其为校验和。我没有受过这类语言的训练,我也试着研究过,但我自己无法把它整理出来。
下面的文字是从提供的文献中复制的,描述了 "71"(ckck)的问题......。
- ckck = 2个ASCII控制字符:对应于对字符 "AxxxxxxByyyy "进行逐字逻辑XOR运算得到的两个十六进制数字。例如:如果对 "AxxxxxxByyyy "字符串中字符的ASCII码进行字节逻辑XOR操作,返回十六进制值0x2A,控制字符ck为 "2 "和 "A"。
你没有指定语言,但这里是C#的算法。基本上是将字符串的值全部xor在一起,最后你会得到一个113,71的十六进制值。因此,71在输入字符串的末端。
string input = "AHELLO N-12345";
UInt16 chk = 0;
foreach(char ch in input) {
chk ^= ch;
}
MessageBox.Show("value is " + chk);
输出 "值是113"