-1

我有存储为字节的无符号 32 位、64 位原语。我需要在 Java 中使用它们。所以我想把它们从字节重新组合在一起。首先,我正在玩随机字节以确保所有内容都正确计算。但是我遇到了一些问题:

// input: array of 4 bytes (unsigned int 0 to 4,294,967,295)
// output: double 0.0 to 1.0 (0 -> 0.0, 2,147,483,647 ~> 0.5, 4,294,967,295 -> 1.0)

byte[] bytes = new byte[100];
(new Random()).nextBytes(bytes); // randomize bytes

long a = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
double b = 1.0 * (a & 0xffffffffL) / 0xffffffffL;

System.out.println(bytes[3] + "," + bytes[2] + "," + bytes[1] + "," + bytes[0]);
System.out.println(a);
System.out.println(b);

输出 b 大部分时间接近 1.0 和接近最大无符号整数。我究竟做错了什么 ?我如何获得想要的行为?以及如何使用 8 个字节为 QWORD 做同样的事情(正确计算)?

4

1 回答 1

1

要将字节数组转换为双精度,请使用ByteBuffer,请参阅此问题以获取示例代码。正如您将在示例代码中注意到的那样,如果输出和输入平台不匹配,您可能需要更改字节数组的字节序。

于 2013-04-15T15:16:47.030 回答