gpt4 book ai didi

Java ByteBuffer BigEndian double

转载 作者:搜寻专家 更新时间:2023-10-31 20:25:42 25 4
gpt4 key购买 nike

当我尝试在文件中写入具有如下值的二进制文件时:

public static main(String[] args){
ByteBuffer output = ByteBuffer.allocate(80);
output.order(ByteOrder.BIG_ENDIAN);
output.putDouble(545.5);
appendByteArrayInFile("c:/myPath/", "test.bin", output.array());
}
private static void appendByteArrayInFile(String exportDirectory, String fileName, byte[] toAppendInFile) {
if (toAppendInFile != null) {
File targetExport = createPathAndFile(exportDirectory + fileName);
try (FileOutputStream output = new FileOutputStream(targetExport, true)) {
output.write(toAppendInFile);
} catch (Exception e) {
// no
}
}
}
private static File createPathAndFile(String path) {
File targetExport = new File(path);
targetExport.getParentFile().mkdirs();
return targetExport;
}

问题是,当我查看生成的文件时, double 似乎以小端格式放置,而当我将 ByteOrder 切换为小端模式时, double 以大端格式写入 ...但是当我输入一个 int 时,字节顺序是正确的。

BigEndian 的 double 输出:

01000000 10000001 00001100 00000000 00000000 00000000 00000000 00000000

在 littleEndian 中使用 double 输出:

00000000 00000000 00000000 00000000 00000000 00001100 10000001 01000000

在 bigEndian 中使用 int 输出:

00000000 00000000 00000010 00100001

最佳答案

据我了解,IEEE float 中的尾数根本不是“字节序”,因为它不是独立的数值。如果有效数表示为基数 2,则它是小数点后的二进制数字序列。 (在小数点左侧,始终假定为“1.”。)有效数字表示为 0001 00001100 00000000 00000000 00000000 00000000 00000000。 ,这意味着实际的有效数字是 1.00010000110…2。那么,实际值为 1.00010000112 × 29,即 545.5。

关于Java ByteBuffer BigEndian double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44115182/

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