go - 将 []byte 数组(java 双编码)转换为 Float64

标签 go floating-point byte

因此,我正在尝试将字节数组解码为 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/

相关文章:

multithreading - Go 是否可以在不为每个外部进程启动一个 OS 线程的情况下生成并与外部进程通信?

java - JAVA如何让给定长度的字节数组由其他给定长度的字节数组组成

arrays - powershell 中的字节类型转换

go - 寻找有关如何在 golang 中创建 dll/so/dylib 的基本示例/资源

go - 构建打包器导致权限被拒绝错误

io - 在两个函数之间发送 `Reader`

Python计算错误

java - 什么会导致 float 在没有算术变化的情况下突然偏离 1 位

用于数值积分的 C 代码在一台计算机上运行但在另一台计算机上崩溃

java - 给自己分配一个负字节