读书人

问个进制显示 转换的有关问题

发布时间: 2013-01-28 11:49:56 作者: rapoo

问个进制显示 转换的问题
最近在做个接口 按照接口说明书上其中一段话

引用
说明书说明
例:收到或发送的字符序列是:“~1203400456ABCDFEFC72CR”(“~”为SOI,“CR”为EOI),则最后五个字符“FC72CR”中的FC72是CHKSUM,计算方法是:
‘1’+‘2’+‘0’+……+‘A’+‘B’+……+‘F’+‘E’
=31H+32H+30H+……+41H+42H+……46H+45H=038EH
其中‘1’表示1的ASCII码值,‘E’表示E的ASCII码值。038EH模65536余数是038EH,038EH取反加1就是FC72H。



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") 尝试过这样 不起作用
[解决办法]
~(sum % 65535) + 1
问题在这里,结果已经转成int了

另外,既然你sum定义的是ushort (0~65535),而且你说的是模65536,这里干什么还多此一举的%呢,而且还是个错的值

按你说的,sum(ushort)模65536(10000H)余数取反加1
----> (ushort)(~sum + 1u)
[解决办法]
string s = "FFFFFC72".TrimStart('F');

读书人网 >C#

热点推荐