登录
首页 >  Golang >  Go问答

整数到字节的转换:Java 与 Go 的比较

来源:stackoverflow

时间:2024-02-11 08:06:25 425浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《整数到字节的转换:Java 与 Go 的比较》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我想连接两个服务器应用程序。一种是用 java 编写的,另一种是用 go 编写的。两者都通过字节级别的简单协议进行通信。

在 go 应用程序中我得到了这个结果:

buf := bytes.newbuffer(make([]byte, 0, 17)
binary.write(buf, binary.littleendian, 1066249)

0 = {uint8} 79

1 = {uint8} 74

2 = {uint8} 16

3 = {uint8} 0

但是如果我在 java 应用程序中执行相同的操作,我会得到以下数字:

byte[] result = ByteBuffer.allocate(Integer.SIZE / Byte.SIZE).order(ByteOrder.LITTLE_ENDIAN).putInt(1066249).array();

0 = 9

1 = 69

2 = 16

3 = 0

有人知道我在 java 方面做错了什么吗?


正确答案


当我尝试执行您共享的 code 时,它给出了正确的错误消息

2009/11/10 23:00:00 error writing to the buffer, binary.write: invalid type int

这就是 link 为什么你不能使用任意大小值

推荐的方法是处理错误,错误代码给出失败或意外行为的原因。这是给出与 java 相同结果的工作代码

package main

import (
    "bytes"
    "encoding/binary"
    "fmt"
    "log"
)

    func main() {
        buf := &bytes.buffer{}
        var data int32 = 1066249
        err := binary.write(buf, binary.littleendian, data)
        if err != nil {
            log.fatalf("error writing to the buffer, %s", err.error())
        }
        fmt.printf("%v", buf.bytes())
    }

输出

[9 69 16 0]

这是演示 link 的工作代码

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>