因此,我正在尝试将字节数组解码为 Float64。我尝试了很多不同的方法,在整个 StackOverflow 上都找到了,但到目前为止还没有成功! Here's the go playground link to what I have tried .
预期值应为 3177408.5
。原始值是 Java double,编码为 IEEE 754 float
编辑:
该值使用 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 。
Playground :https://play.golang.org/p/4KGZoWjLTF .
关于go - 将 []byte 数组(java 双编码)转换为 Float64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40890557/