我正在为我的项目做一个简单的控制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;
}
答案 0 :(得分:2)
ASCII字符限制为最低128个Unicode字符,从U + 0000到U + 007F。
所以不要将输入A0h 45h 11h 83h
或69d 17d 160d 131d
转换为字符串,而是从中创建一个字节数组。
答案 1 :(得分:2)
您可能想要the encoding Latin1 aka ISO-8859-1 aka CP28591。
此编码将所有具有0-255范围内十六进制值的字节映射到具有相同十六进制值的Unicode字符 - 方便将二进制值发送到串行端口。