计算校验和或XOR操作

问题描述 投票:0回答:1

我正在使用超终端,并试图发送字符串到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"。

ascii checksum xor serial-communication hyperterminal
1个回答
0
投票

你没有指定语言,但这里是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"

© www.soinside.com 2019 - 2024. All rights reserved.