0

我正在对我的一个项目进行简单的控制 CRC,该项目通过串行端口将数据发送到 Arduino。

我正在尝试计算消息的 CRC:A0h 45h 11h 83h 或 69d 17d 160d 131d

转为字符串,给出计算信息:“Eá◄â” 转为 ASCII 返回结果:69d 63d 63d 63d

为什么会这样?代码如下

tks

public byte CalculateCRC(string data)
{
    data = "Eá◄â";
    byte[] characters = new byte[System.Text.Encoding.ASCII.GetByteCount(data)];
    characters = System.Text.Encoding.ASCII.GetBytes(data);

    byte result = 0;
    foreach (byte character in characters )
        result = (byte)(result + character);
    result = (byte)(result + 1);
    return result;
}
4

2 回答 2

2

您可能想要编码 Latin1 aka ISO-8859-1 aka CP28591

这种编码会将所有具有 0-255 范围内十六进制值的字节映射到具有相同十六进制值的 Unicode 字符 - 便于将往返值发送到串行端口。

于 2013-11-05T13:32:02.473 回答
2

编码.ASCII 属性

ASCII 字符限制为最低 128 个 Unicode 字符,从 U+0000 到 U+007F。

所以不要将输入A0h 45h 11h 83h69d 17d 160d 131d转换成字符串,而是用它创建一个字节数组。

于 2013-11-05T13:25:22.387 回答