gpt4 book ai didi

java - 如何使用 Java ByteBuffer 处理负 int

转载 作者:行者123 更新时间:2023-12-01 22:04:18 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它使用 ByteBuffer 将整数数组(转换为字符串)发送到我的服务器,该应用程序是用 Ruby 编写的。服务器获取字符串并将其解包。我构建 ByteBuffer 的代码如下所示:

ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.order(ByteOrder.LITTLE_ENDIAN);

bytes.putInt(int1);
bytes.putInt(int2);
bytes.putInt(int3);
bytes.putInt(int4);

String byteString = new String(bytes.array());

当整数都是正值时,这非常有效。当它有一个负整数时,事情就会出错。例如,在iOS中,当我提交像[1,1,-1,0]这样的整数数组时,服务器上的字节字符串是:

"\x01\x00\x00\x00\x01\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00"

正确解压为 [1,1,-1,0]。

但是,在 Android 中,当我尝试提交相同的 [1,1,-1,0] 数组时,我的字符串是:

"\x01\x00\x00\x00\x01\x00\x00\x00\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\x00\x00\x00\x00"

解压后为 [1, 1, -272777233, -1074807361]。

如果我将负 int 转换为无符号 int:

byte intByte = (byte) -1;
int unsignedInt = intByte & 0xff;

我得到以下信息:

"\x01\x00\x00\x00\x01\x00\x00\x00\xEF\xBF\xBD\x00\x00\x00\x00\x00\x00\x00"

解压为 [1, 1, 12435439, 0]。我希望有人可以帮助我弄清楚如何正确处理这个问题,以便我可以正确发送负值。

最佳答案

您的问题在这里:

String byteString = new String(bytes.array());

你为什么要这么做?您想要发送字节流,那么为什么将其转换为 char 流?

如果你想发送字节,就发送字节。使用OutputStream,而不是Writer;使用InputStream,而不是Reader。整数是“负”或“正”这一事实并不重要。

关于java - 如何使用 Java ByteBuffer 处理负 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33066834/

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