gpt4 book ai didi

c# - c#转java时有符号/无符号情况

转载 作者:行者123 更新时间:2023-11-30 22:30:05 26 4
gpt4 key购买 nike

我目前正在将以下代码从 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 字节“转换”为无符号字节,但我不确定在哪里执行此操作!

谢谢!

最佳答案

只需要改变返回值,使返回类型int

return cs & 0xFF;

您不需要更改 cs 的类型,因为无论是 intshort 还是 long,它都会给出相同的结果使用 0xFF 后。您也不需要屏蔽每个值。

public static void main(String... args) {
byte[] bytes = { 1, -128, -1 }; // check sum is -128 or 0x80 or 128 (unsigned)
System.out.println("makeCS "+ makeCS(bytes));
System.out.println("makeCS2 "+ makeCS2(bytes));
System.out.println("makeCS3 "+ makeCS3(bytes));
}

public static int makeCS(byte... arr) {
byte cs = 0;
for (byte b : arr)
cs += b;
return cs & 0xFF;
}

public static int makeCS2(byte[] arr)
{
int cs = 0;
for (int i = 0; i < arr.length; i++)
{
int add = arr[i];
cs += (0xFF & add);
cs &= 0xFF;
}
return cs;
}

public static short makeCS3(byte[] arr)
{
short cs = 0;
for (int i = 0; i < arr.length; i++)
{
cs += arr[i];
}
return cs;
}

打印

makeCS 128
makeCS2 128
makeCS3 -128

关于c# - c#转java时有符号/无符号情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9875087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com