当前位置: 首页 > 面试题库 >

将int转换为字节数组时的结果不同-.NET与Java

仲孙磊
2023-03-14
问题内容

我正在尝试将数据从Java客户端发送到ac#服务器,并且在将int转换为字节数组时遇到麻烦。

当我使用此代码使用C#转换数字8342时:

BitConverter.GetBytes(8342)

结果是:x [4] = {150,32,0,0}

与Java我使用:

ByteBuffer bb = ByteBuffer.allocate(4); 
bb.putInt(8342); 
return bb.array();

结果是:x [4] = {0,0,32,-106}

有人可以解释吗?我是Java新手,这是我第一次在字节数组中看到负数。


问题答案:

您必须更改字节序:

 bb.order(ByteOrder.LITTLE_ENDIAN)

Java在内部将事物存储为Big Endian,而.NET默认为Little Endian。

Java和.NET之间的有符号和无符号也有所不同。Java使用带符号的字节,C#使用无符号的字节。您也必须更改它。

基本上,这就是为什么您看到-106(150-256)

您将必须执行以下类似于实用程序方法的操作:

public static void putUnsignedInt (ByteBuffer bb, long value)
    {
       bb.putInt ((int)(value & 0xffffffffL));
    }

请注意,值很长。



 类似资料:
  • 问题内容: 我需要将缓冲区的长度存储在4个字节大的字节数组中。 伪代码: 做到这一点的最佳方法是什么?请记住,稍后我必须将该字节数组转换回整数。 问题答案: 您可以使用以下方式将其转换为字节: 注意,这样做时可能必须考虑字节顺序。

  • 我必须在皈依前向小恩迪安下订单。 在第一种情况下,我很容易进行转换: 在第二种情况下,转换不起作用: 数字3832745171大于,但如果我试图转换为long,我也会遇到问题。 我怎么能这么做?谢谢。 尝试将字节数组转换为int/long类型。

  • 问题内容: 令人难以置信。为什么输出-124? 问题答案: 在Java中,an 是32位。A 是8 。 最原始的类型Java中的签名,,,,和long被编码在二进制补码。(类型为unsigned,并且sign的概念不适用于。) 在此数字方案中,最高有效位指定数字的符号。如果需要更多位,则将最高有效位(“ MSB”)简单复制到新的MSB中。 因此,如果你具有 并将其表示为 32位,则只需将1复制到左

  • 问题内容: 我需要将结果集转换为字符串数组。我正在从数据库中读取电子邮件地址,我需要能够像这样发送它们: 这是我的阅读电子邮件地址的代码: MyOutput是: 我需要这样: 我正在使用Oracle 11g。 问题答案: 获得所需的输出: 替换这些行 通过

  • 问题内容: 我将开始处理需要读取字节并创建字符串的内容。读取的字节代表UTF-16字符串。因此,为了进行测试,我想将UTF-16编码的简单字节数组转换为字符串。数组中的前2个字节必须表示字节序,因此必须为0xff 0xfe或0xfe 0xff。所以我尝试如下创建字节数组: 但是我收到一个错误,因为0xFF和0xFE太大而无法容纳一个字节(因为字节是用Java签名的)。更准确地说,错误是int无法转

  • 问题内容: 我有一个接收a的函数,但是我所拥有的a是进行此转换的最佳方法是什么? 我想我可以走很长一段路,然后将其放入字符串并放入字节中,但这听起来很难看,而且我认为还有更好的方法可以做到。 问题答案: 我同意Brainstorm的方法:假设您要传递机器友好的二进制表示形式,请使用该库。OP建议可能会有一些开销。纵观源的实施,我看到它做了一些运行时的决策最大的灵活性。 对?Write()接受一个非