arrays - 如何将固定长度的十六进制符文数组转换为单个整数
问题描述
给定一个以十六进制编码的字符串符文数组,我如何将其转换为单个整数。例如:
var digits [8]rune = "00000010"
magicFunction(digits)
// gives 16
var digits2 [8]rune = "deadbeef"
magicFunction(digits2)
// gives 3735928559
Go 的encoding/hex
包似乎只能转换为字节数组(使用Decode
or DecodeString
)。
我可以将符文数组转换为字符串,然后使用 DecodeString,但我无法弄清楚如何从它产生的字节数组中获取整数。数组将是固定长度 (8),所以我不需要可变数组,我想要一个值!
没有重新实现十六进制解码算法,有没有合适/好的方法来做到这一点?
解决方案
请注意,在 a 中保存一个数字[8]rune
看起来很奇怪并且效率低下。但如果你必须...
如果性能不重要,只需将 runes 输入转换为string
,然后调用strconv.ParseInt()
,将 16 作为基数传递:
func magicFunction(rs [8]rune) (uint32, error) {
x, err := strconv.ParseInt(string(rs[:]), 16, 64)
return uint32(x), err
}
测试它的示例:
var digits [8]rune = [8]rune{'0', '0', '0', '0', '0', '0', '1', '0'}
fmt.Println(magicFunction(digits))
// gives 16
var digits2 [8]rune = [8]rune{'d', 'e', 'a', 'd', 'b', 'e', 'e', 'f'}
fmt.Println(magicFunction(digits2))
// gives 3735928559
输出(在Go Playground上试试):
16 <nil>
3735928559 <nil>
如果性能确实很重要:那么“手动”进行:有一个数字来保存结果,并在每个数字左移 4 处,将符文转换为其数值,然后将其与变量按位或。
推荐阅读
- node.js - Dialogflow - 如果在调用上下文时输入无效,如何重新提示最终用户?
- python - 如何返回找到的字符串行?
- web2py - 为什么 Web2Py 网站可以在本地运行,但在我将其上传到 PythonAnywhere 时会出现错误?我将如何解决我在本地没有得到的错误?
- wordpress - 用于查看成员特定表单数据的 Wordpress 插件
- javascript - jquery切换复选框的选中属性不触发更改事件
- python - 使用 PyQGIS 3.10 和更高版本获取 PostGIS 表列表
- algorithm - 给定属性的最大前缀
- php - 无法解析类中的依赖项 [Parameter #0 [ <required> $card_id ]]
- java - 我可以使用 java 内存映射文件 (MappedByteBuffer) 处理大于系统内存的文件吗?
- javascript - 无法解决未捕获的类型错误:无法读取 null 的属性“classList”