1 回答
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)。
- 1 回答
- 0 关注
- 171 浏览
添加回答
举报