我正在下面的代碼從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