我需要帮助将此代码从C#转换为Java。如何将C#中的校验和代码转换为Java?
public static ulong GetChecksum(byte[] data)
{
ulong sum = 0;
foreach (var item in data)
sum += item;
return ulong.MaxValue - sum + 1;
}
Java版本将返回long,而不是ulong。
编辑:我还没有尝试过任何东西,因为我不知道如何处理最后一行ulong.MaxValue。基本上,我最终得到的结果是在C#中生成与(getChecksum(buffer))长度相同的数字,与java中的getChecksum(buffer)相同。 我对java很陌生,这就是为什么我要问这个问题。
编辑2:这是最终的解决方案。许多有用的评论。感谢你们。
public static byte[] getChecksum(byte[] data) {
BigInteger sum = BigInteger.ZERO;
for (byte s : data)
sum = sum.add(BigInteger.valueOf((long) ((char) s & 0xFF)));
return new BigInteger("FFFFFFFFFFFFFFFF", 16).subtract(sum).add(BigInteger.ONE).toByteArray();
}
编辑2:太糟糕了,这个问题被降低了。它有许多有用的评论。
你试过了吗? –
你有什么问题? Java和C#已经很相似了,这是一个非常简单的函数。 – mpen
'byte'在C#中是无符号的,那么在Java中使用什么类型的适当类型呢? C#中的'foreach'循环在Java中不存在,替换它的适当构造是什么?你将如何处理C#返回一个无符号类型,但在Java中返回一个签名类型?你担心溢出吗? (这些是您应该考虑的问题,并且使用Google进行搜索,而不是要求陌生人编写您的转换。) –