Go语言中对应Python bytes()/bytearray()的等价实现方法
Go 实现 Python bytes() 整数列表转字节对象的等价方案
实现原理
Python 中对 0-255 范围的整数列表调用 bytes(),本质是按顺序将每个整数映射为对应值的单字节,拼接为连续字节序列。Go 中 byte 是 uint8 的类型别名,取值范围正好匹配 0-255,直接构造 []byte 切片即可得到完全等价的字节对象。
直接实现代码
如果输入的整数值都在0-255范围内,可以直接声明为[]byte类型:
package main import "fmt" func main() { // 对应Python中的待转换整数列表 toConvert := []byte{3, 40, 234, 1, 23, 65, 43, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100} // toConvert 就是和Python中converted完全等价的字节对象,底层字节序列完全一致 // 如果需要打印验证,用%#v可以输出Go语法格式的字节切片表示 fmt.Printf("%#v\n", toConvert) }
输入为[]int类型时的转换方法
如果初始输入是[]int类型的整数切片,遍历逐个转换类型即可:
intList := []int{3, 40, 234, 1, 23, 65, 43, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100} converted := make([]byte, len(intList)) for idx, val := range intList { converted[idx] = byte(val) }
结果一致性说明
上述代码生成的[]byte对象,底层字节序列和Python输出的b'\x03(\xea\x01\x17A+Hello world'完全一致:
- 可打印ASCII字符部分(
(、A、+、Hello world)对应字节值和Python结果完全匹配 - 非打印、非ASCII字节(
0x03、0xea等)的取值和顺序也和Python结果完全相同 - 两者可以直接用于网络传输、文件写入、哈希计算等场景,输出结果没有任何差异
内容的提问来源于stack exchange,提问作者Konik
相关产品推荐
相关产品推荐

