最近在做个接口 按照接口说明书上其中一段话 public static string CHKSUM(string str)
{
ushort sum = 0;
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
byte[] byteArr = asciiEncoding.GetBytes(str); foreach (byte c in byteArr)
{
sum += c;
}
return (~(sum % 65535) + 1).ToString("X2");
}
//调用这个方法CHKSUM("1203400456ABCDFE"); 结果返回的是 FFFFFC72
我想得到的直接就是 "FC72"
虽然我可以硬截取后4位 但是我想有没有更好的办法 比如什么单字节 双字节之类的?
.ToString("X1") 尝试过这样 不起作用
{
ushort sum = 0;
System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
byte[] byteArr = asciiEncoding.GetBytes(str); foreach (byte c in byteArr)
{
sum += c;
}
return (~(sum % 65535) + 1).ToString("X2");
}
//调用这个方法CHKSUM("1203400456ABCDFE"); 结果返回的是 FFFFFC72
我想得到的直接就是 "FC72"
虽然我可以硬截取后4位 但是我想有没有更好的办法 比如什么单字节 双字节之类的?
.ToString("X1") 尝试过这样 不起作用
问题在这里,结果已经转成int了另外,既然你sum定义的是ushort (0~65535),而且你说的是模65536,这里干什么还多此一举的%呢,而且还是个错的值按你说的,sum(ushort)模65536(10000H)余数取反加1
----> (ushort)(~sum + 1u)