arrays - 如何将固定长度的十六进制 rune 数组转换为单个整数

标签 arrays go hex rune

给定一个以十六进制编码的字符串的 rune 数组,如何将其转换为单个整数。例如:

var digits [8]rune = "00000010"
magicFunction(digits)
// gives 16

var digits2 [8]rune = "deadbeef"
magicFunction(digits2)
// gives 3735928559
Go的 encoding/hex 软件包似乎只能转换为字节数组(使用 Decode DecodeString )。
我可以将 rune 数组转换为字符串,然后使用DecodeString,但是我不知道如何从其生成的字节数组中获取整数。该数组将是固定长度(8),所以我不需要可变数组,我想要一个值!
没有重新实现十六进制解码算法,是否有适当/好的方法来做到这一点?

最佳答案

请注意,将一个数字保存在[8]rune中看起来很奇怪并且效率很低。但是如果你必须...
如果性能不是很关键,只需将您的 rune 输入转换为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时将 rune 转换为其数值,然后将其与变量按位或。

关于arrays - 如何将固定长度的十六进制 rune 数组转换为单个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62874336/

相关文章:

Java:将二进制字符串转换为十六进制字符串

c - 在 C 中向后循环名称

javascript - "Join"两个数组

c - 将 CSV 文件读取到 C 中的二维双数组

sql - 在 Go 中控制指针

c - 调整图像二进制大小

Android:使用 ListView ArrayAdapter/ArrayList

http - 为什么 Go 中的 http 客户端在发出 https 请求时会通过代理返回 Unauthorized?

regex - 如何在Go中将正则表达式与反向引用匹配?

C: 将接收到的 Winsock 数据包保存为十六进制文件