gpt4 book ai didi

java - 将代码从 C# 转换为 Java - 位操作、Int64 到 long

转载 作者:行者123 更新时间:2023-11-30 02:15:56 25 4
gpt4 key购买 nike

我正在尝试将此代码段从 C# 转换为 java。 C# 代码段正确返回值 3259945,java 代码错误返回 -16855。我对位操作完全没用,甚至不知道从哪里开始。有人可以帮忙吗?

如果人们需要输入变量,我会尝试将缓冲区字节数组作为十六进制字符串获取,以便我可以将其放置起来。我使用的 startIndex26

C# 代码片段:

Int64 mantissa = ((Int64)(buffer[startIndex] & 0x7F) << (8 * 2))
| ((Int64)buffer[startIndex + 3] << (8 * 1))
| ((Int64)buffer[startIndex + 2] << (8 * 0));

Java 代码片段:

long mantissa = ((long)(buffer[startIndex] & 0x7F) << (8 * 2))
| ((long)buffer[startIndex + 3] << (8 * 1))
| ((long)buffer[startIndex + 2] << (8 * 0));

最佳答案

正如评论中提到的,在 .NET 中,字节是无符号的(0 到 255),而在 Java 中,字节是有符号的(-128 到 127)。要对其进行标准化,您需要使用 & 0xFF 掩码。

long mantissa = ((long)(buffer[startIndex] & 0x7F) << (8 * 2))
| ((long)(buffer[startIndex + 3] & 0xFF) << (8 * 1))
| ((long)(buffer[startIndex + 2] & 0xFF) << (8 * 0));

在第一种情况下,您不需要此掩码,因为符号位已被 0x7F 清除。

关于java - 将代码从 C# 转换为 Java - 位操作、Int64 到 long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48452743/

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