为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 go 中读取二进制数据?(智能卡)将代码转换为 java

如何在 go 中读取二进制数据?(智能卡)将代码转换为 java

Go
慕标5832272 2022-05-23 16:54:08
我需要将以下代码转换为 Java 编程语言。[]字节{}是什么意思?什么是 uint8 类型?func int8ToByte(int_val int) byte {    buf := new(bytes.Buffer)    err := binary.Write(buf, binary.LittleEndian, uint8(int_val))    if err != nil {        log.Fatal("binary.Write failed:", err)    }    return buf.Bytes()[0]}
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

[]byte{}是一个复合文字,它创建一个空字节切片(类型为[]byte)。该uint8类型是一个大小为 1 字节的无符号整数类型。在 Go 中,类型byte是 的别名uint8,所以byte和uint8是等价的并且完全可以互换。


我不知道是谁编写了你的int8ToByte()函数,但这似乎是一种混淆。它所做的只是返回其参数的最低有效字节,这只不过是从to的简单转换:intbyte


byte(int_val)

请参阅此 Go 示例:


func main() {

    fmt.Println(int8ToByte(0x01))

    fmt.Println(int8ToByte(0x0102))

    fmt.Println(int8ToByte(-1))


    var i int

    i = 0x01

    fmt.Println(byte(i))

    i = 0x0102

    fmt.Println(byte(i))

    i = -1

    fmt.Println(byte(i))

}


func int8ToByte(int_val int) byte {

    buf := new(bytes.Buffer)

    err := binary.Write(buf, binary.LittleEndian, uint8(int_val))

    if err != nil {

        log.Fatal("binary.Write failed:", err)

    }

    return buf.Bytes()[0]

}

它输出(在Go Playground上尝试):


1

2

255

1

2

255

要在 Java 中实现同样的效果,您只需将int数字转换为byte:


 public static void main(String []args){

    int i = 0x01;

    System.out.println((byte)i);

    i = 0x0102;

    System.out.println((byte)i);

    i = -1;

    System.out.println((byte)i + " " + String.format("%x", (byte)i));

 }

这输出:


1

2

-1 ff

注意区别:Javabyte是有符号的,它的有效范围是-128..127,而 Gobyte是无符号的,它的有效范围是0..255. 但是两个输出的二进制表示是相同的。有关详细信息,请参阅用于 HOTP 的 Java 与 Golang (rfc-4226)。


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信