我正在下面的代码从C#转换为Java时:签名/未签名的情况下C#转换为Java
public static byte MakeCS(byte[] arr)
{
byte cs = 0;
for (int i = 0; i < arr.Length; i++)
{
cs += arr[i];
}
return cs;
}
我幼稚的对话是刚刚改变arr.Length到arr.length; )
但是,这给了我不正确的校验和,因为java已经签署了字节,并且c#有未签名的(我试着将c#代码改为sbyte并且工作正常)。
处理这种情况的正确方法是什么?我知道我可以通过0xFF将Java字节“转换”为无符号位,但我不确定在哪里执行此操作!
谢谢!
+1为了达到比我的回答更好的地步。尽管如此,为了澄清OP:基本上,有符号和无符号字节之间唯一不同的代码是使用'<=', '> =','<', '>','/','%'或'toString'的代码。 – 2012-03-26 16:05:06
对于'<=' '> =''<' and '>'您可以添加'Byte.MIN_VALUE'或'&0xFF'其余的您需要'&0xFF'添加MIN_VALUE技巧对'long'很有用,因为没有更大的类型投到(BigInteger除外) – 2012-03-26 16:09:22
有些人更喜欢XOR或减法而不是加法,但它们都是等价的。(就我个人而言,我更容易理解'^'发生了什么,只是因为我不必通过溢出来推理。) – 2012-03-26 16:17:33