1

我正在使用超级终端并尝试将字符串发送到 6 位记分牌。制造商向我发送了一个示例字符串进行测试,它可以工作,但是为了能够更改显示的消息,我被告知要计算一个新的校验和值。

示例字符串为:&AHELLO N-12345\71

字符 A 和 N 是记分牌的地址(允许通过一个 RS232 连接使用两个显示器)。HELLO 和 -12345 是要在显示屏上显示的字符。“71”是我卡住的地方。

如何从“AHELLO N-12345”中获得 71?

在与记分板一起提供的文献中,样本字符串中的“71”被描述为对字符“AHELLO N-12345”进行逐个字符的逻辑异或运算。然而,制造商称其为校验和。我没有接受过这种语言的培训,我确实尝试过研究,但我不能自己把它放在一起。

下面的文字是从提供的文献中复制而来的,并描述了有问题的“71”(ckck)......

- ckck = 2个ASCII控制字符:对应于对字符“AxxxxxxByyyyyy”进行逐字符逻辑异或运算得到的两个十六进制数字。如果这些字符有错误,则忽略该字符串示例:如果对“AxxxxxxByyyyyy”字符串的字符的ASCII码进行逐字节逻辑异或运算返回十六进制值0x2A,则控制字符ckck为“ 2”和“A”。

4

1 回答 1

0

您没有指定语言,但这是 C# 中的算法。基本上将字符串的值全部异或,最终得到十六进制值 113, 71。因此 71 在输入字符串的末尾。

        string input = "AHELLO N-12345";

        UInt16 chk = 0;
        foreach(char ch in input) {
            chk ^= ch;
        }
        MessageBox.Show("value is " + chk);

输出“值为 113”

于 2020-05-20T16:15:47.767 回答