繁体   English   中英

将[] byte数组(Java双重编码)转换为Float64

[英]Converting a []byte array (java double encoded) to Float64

因此,我正在尝试将字节数组解码为Float64。 我尝试了很多不同的方法,在StackOverflow上都找到了,但是到目前为止还没有运气! 这是我尝试过的去游乐场的链接 期望值应为3177408.5 原始值为Java double,编码为IEEE 754浮点数

编辑:

该值使用org.apache.hadoop.hbase.util.Bytes.toBytes方法进行编码。

double v = 3445713.95;
long ff;

ff = Double.doubleToRawLongBits(v);

bArr = toBytes(ff)

public static byte[] toBytes(long val) {
    byte[] b = new byte[8];

    for(int i = 7; i > 0; --i) {
        b[i] = (byte)((int)val);
        val >>>= 8;
    }

    b[0] = (byte)((int)val);
    return b;
}

实际上应该是: 3445713.95

编辑2:

我的缺点是实际上只是粘贴给出的代码,而没有先考虑很多,Java并不是我的最佳选择。 事实证明,管道中的某个地方存在问题(多个系统正在通信),并且价值正在被破坏。 我将@ Ainar-G的解决方案标记为正确,因为它实际上会返回接近预期的值。

我可以得到的最接近的是如果我使用binary.BigEndian.Uint64

b := []byte("AJ\x02\xef\xe1\xaf(l")
u := binary.BigEndian.Uint64(b)
f := math.Float64frombits(u)
fmt.Printf("%f", f)

这给我3409375.763158 确保您在Java端正确编码了float。

游乐场: https : //play.golang.org/p/4KGZoWjLTF

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM