所以,我试图将字节数组解码为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的解决方案标记为正确,因为它实际上回馈了接近预期的内容。
答案 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端正确编码浮点数。