gpt4 book ai didi

java - 在 Java 中将 C 的 uint32 转换为 int 的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:05 24 4
gpt4 key购买 nike

我正在构建一个由多个组件组成的项目,这些组件使用套接字在字节数组中相互通信。问题是一个组件是用 C 编写的并且支持 Unsigned 原始类型,而其他组件是用 Java 编写的并且不支持 Unsigned 类型。我正在尝试开发对 Java 中无符号类型的支持。我是 Java 的新手。谁能告诉我从字节数组中解码 uint32 和 uint64 的正确方法。

我正在使用以下函数来转换 int32 和 int64

public static int int32Converter(byte b[], int start) {
return ((b[start] << 24) & 0xff000000 |(b[start + 1] << 16) & 0xff0000
| (b[start + 2] << 8) & 0xff00 | (b[start + 3]) & 0xff);
}
public static long int64Converter(byte buf[], int start) {
return ((buf[start] & 0xFFL) << 56) | ((buf[start + 1] & 0xFFL) << 48)
| ((buf[start + 2] & 0xFFL) << 40)
| ((buf[start + 3] & 0xFFL) << 32)
| ((buf[start + 4] & 0xFFL) << 24)
| ((buf[start + 5] & 0xFFL) << 16)
| ((buf[start + 6] & 0xFFL) << 8)
| ((buf[start + 7] & 0xFFL) << 0);
}

谢谢!

最佳答案

您不能完全“转换”它们。您会发现最接近处理无符号值的是 Guava 的 UnsignedInteger。及其实用程序类 UnsignedInts。字节、短裤和长裤也一样。

注意你的代码,不要手动写这些东西,使用ByteBuffer:

public static int bytesToInt(final byte[] array, final int start)
{
final ByteBuffer buf = ByteBuffer.wrap(array); // big endian by default
buf.position(start);
buf.put(array);
return buf.position(start).getInt();
}

将 Guava 用于无符号整数:

public static UnsignedInteger bytesToUnsignedInt(final byte[] array, final int start)
{
return UnsignedInteger.fromIntBits(bytesToInt(array, start);
}

但是,我怀疑 UnsignedInts 确实是您想要的。 (用于比较、打印出来等)

关于java - 在 Java 中将 C 的 uint32 转换为 int 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142475/

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