猿问

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

我需要将以下代码转换为 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]

}


慕标5832272
浏览 172回答 1
1回答

幕布斯6054654

[]byte{}是一个复合文字,它创建一个空字节切片(类型为[]byte)。该uint8类型是一个大小为 1 字节的无符号整数类型。在 Go 中,类型byte是 的别名uint8,所以byte和uint8是等价的并且完全可以互换。我不知道是谁编写了你的int8ToByte()函数,但这似乎是一种混淆。它所做的只是返回其参数的最低有效字节,这只不过是从to的简单转换:intbytebyte(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上尝试):1225512255要在 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)); }这输出:12-1 ff注意区别:Javabyte是有符号的,它的有效范围是-128..127,而 Gobyte是无符号的,它的有效范围是0..255. 但是两个输出的二进制表示是相同的。有关详细信息,请参阅用于 HOTP 的 Java 与 Golang (rfc-4226)。
随时随地看视频慕课网APP

相关分类

Go
我要回答