如何在Java中将DWORD / QWORD从C转换为Double

时间:2013-04-15 15:09:59

标签: java bytearray primitive

我有无符号的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且接近最大unsigned int。我究竟做错了什么 ?我如何获得通缉行为?如何为QWORD使用8个字节进行相同的(正确计算)?

1 个答案:

答案 0 :(得分:1)

要将字节数组转换为double,请使用ByteBuffer,有关示例代码,请参阅this question。正如您在示例代码中注意到的那样,如果输出和输入平台不匹配,您可能需要更改字节数组的字节顺序。