java - 如何在 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]
}
解决方案
[]byte{}
是一个复合文字,它创建一个空字节切片(类型为[]byte
)。该uint8
类型是一个大小为 1 字节的无符号整数类型。在 Go 中,类型byte
是 的别名uint8
,所以byte
和uint8
是等价的并且完全可以互换。
我不知道是谁编写了你的int8ToByte()
函数,但这似乎是一种混淆。它所做的只是返回其参数的最低有效字节,这只不过是从to的简单转换:int
byte
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)。
推荐阅读
- scala - 在火花数据帧中使用 $"col" 而不是 "col" 的优势是什么
- javascript - 如何在javascript的函数参数中插入数据?
- python - 在列中选择数据库行
- javascript - 可以追加jquery已经输出的元素吗?
- javascript - 是否有可能从 google-text-to-speech 获取语音并使用 mongoose 将其保存在数据库中?
- javascript - 在 Java 脚本函数中编写 JQuery 函数的正确方法是什么
- python - 为什么我的 kivy 下拉菜单没有显示(Python)?
- javascript - 从 React Context 命名的导入不能按预期工作
- python-3.x - 比较器函数可以由python中的“和”连接的两个条件组成(用于排序)吗?
- java - TabLayout 活动中的片段通信