英文:
How can I convert from []byte to [16]byte?
问题
我有这段代码:
func my_function(hash string) [16]byte {
b, _ := hex.DecodeString(hash)
return b // 编译错误:因为 [16]byte != []byte,所以失败了
}
b
的类型将是 []byte
。我知道 hash
的长度为 32。如何使上面的代码工作?也就是说,我是否可以将一个通用长度的字节数组转换为固定长度的字节数组?我不想分配 16 个新字节并复制数据。
英文:
I have this code:
func my_function(hash string) [16]byte {
b, _ := hex.DecodeString(hash)
return b // Compile error: fails since [16]byte != []byte
}
b
will be of type []byte
. I know that hash
is of length 32. How can I make my code above work? Ie. can I somehow cast from a general-length byte array to a fixed-length byte array? I am not interested in allocating 16 new bytes and copying the data over.
答案1
得分: 12
没有直接将切片转换为数组的方法。但是你可以进行复制操作。
var ret [16]byte
copy(ret[:], b)
标准库使用[]byte
,如果你坚持使用其他类型,那么你需要更多的输入。我曾经使用数组来编写我的MD5值的程序,但后悔了。
英文:
There is no direct method to convert a slice to an array. You can however do a copy.
var ret [16]byte
copy(ret[:], b)
The standard library uses []byte and if you insist on using something else you will just have a lot more typing to do. I wrote a program using arrays for my md5 values and regretted it.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论