2
嗨我想查找单个字符串的校验和。这里是校验和的要求。在C#中找到一个字符串的校验和.net
- 以十六进制字符表示的32位/ 8字节校验和。
- 它应该是头+会话+ body +消息的XOR。
让我们假设header + session + body + message =“这是测试字符串”。我想计算这个的校验和。到目前为止,我开发了下面的代码。
校验计算正确如果string length(byte[] data)
是4
倍数。如果“数据”不是4的倍数我接收异常作为
“System.IndexOutOfRangeException:索引的边界之外阵列“。
我将从用户采取不同字符串长度的输入,因此字符串长度将是可变的(意味着某些时间用户只能输入ABCDE几次q和A等)。我怎样才能解决这个问题,除了计算和校验正确与4
public string findchecksum(string userinput)
try
{
ASCIIEncoding enc = new ASCIIEncoding();
byte[] data = Encoding.ASCII.GetBytes(userinput);
byte[] checksum = new byte[4];
for (int i = 16; i <= data.Length - 1; i += 4)
{
checksum[0] = (byte)(checksum[0]^data[i]);
checksum[1] = (byte)(checksum[1]^data[i + 1]);
checksum[2] = (byte)(checksum[2]^data[i + 2]);
checksum[3] = (byte)(checksum[3]^data[i + 3]);
}
int check = 0;
for (int i = 0; i <= 3; i++)
{
int r = (Convert.ToInt32(checksum[i]));
int c = (-(r + (1))) & (0xff);
c <<= (24 - (i * 8));
check = (check | c);
}
return check.ToString("X");
通过扩展数据数组会影响原始字符串? –
不,它不会。源字符串和字节数组不绑定在一起。 – MarcinJuraszek
非常感谢你的帮助:) –