0

我正在将一些东西从 C# 移植到 Java,我需要一个可以将字节转换为原语的类,就像 .NET 中的 BitConverter 一样。

正如我刚刚在此处发布的那样,我注意到我的计算机使用 Little-Endian (Intel) 并且 BitConverter 按预期工作:

// C# code
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);

b2short == 256 正如预期的那样。

好吧,我需要一个 JAVA 中的“BitConverter”并找到了这段代码。但是,当我在 JAVA 中尝试它时,在我看来,这些方法将字节数组解释为 Big-Endian。JAVA代码:

// JAVA code
byte[] b2 = new byte[] { 0, 1 };
short b2short = MyFoundConverter.BitConverter.toShort(b2, 0);

在这种情况下,b2short == 1 在我看来就像 Big-Endian。

此网页上的代码是否将字节数组解释为 Big-Endian?

如果是这样,是否有一种简单的方法可以使它成为 Little-Endian?

4

2 回答 2

1

您链接到的代码采用第一个字节,并将其作为短字节的高位字节。第二个字节进入短字节的低位字节。所以这是一个大端操作。它的编码方式,没有简单的方法来解决这个问题,除了逐个方法并交换数组索引,以便最高索引变为最低索引。

我发现了另一个代码位,它将采用数据类型并交换其字节序。也许你可以将两者结合起来。

于 2010-01-07T21:23:18.880 回答
0

您需要的代码是:

byte[] b2 = new byte[] { 0, 1 };
short b2short = b2[0] | (b2[1] << 8);

对于 int 值:

byte[] b4 = new byte[] { 0, 1, 2, 3 };
int b4int = b4[0] | (b4[1] << 8) | (b4[2] << 16) | (b4[3] << 24);

你明白了:-)

于 2010-01-07T21:23:08.863 回答