在C#中获取字符串的ASCII值以计算简单的CRC

时间:2013-11-05 13:18:13

标签: c# asp.net crc

我正在为我的项目做一个简单的控制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;
}

2 个答案:

答案 0 :(得分:2)

  

Encoding.ASCII Property

     

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

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

答案 1 :(得分:2)

您可能想要the encoding Latin1 aka ISO-8859-1 aka CP28591

此编码将所有具有0-255范围内十六进制值的字节映射到具有相同十六进制值的Unicode字符 - 方便将二进制值发送到串行端口。