将[]字节数组(java双重编码)转换为Float64

时间:2016-11-30 14:12:21

标签: go floating-point byte

所以,我试图将字节数组解码为Float64。我已经尝试了很多不同的方法,遍布StackOverflow,但到目前为止还没有运气! Here's the go playground link to what I have tried。  预期值应为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

Edit2:

我实际上只是粘贴我给出的代码是不好的,没有先考虑,Java不完全是我的一杯茶。事实证明,管道中的某个地方存在问题(多个系统正在通信),并且价值正在被破坏。我将@ Ainar-G的解决方案标记为正确,因为它实际上回馈了接近预期的内容。

1 个答案:

答案 0 :(得分:2)

我最接近的是如果我使用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端正确编码浮点数。

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