如何将固定长度的十六进制符文数组转换为单个整数
How to convert a fixed-length array of hexadecimal runes to a single integer
给定一个以十六进制编码的字符串形式的符文数组,我如何将其转换为单个整数。例如:
var digits [8]rune = "00000010"
magicFunction(digits)
// gives 16
var digits2 [8]rune = "deadbeef"
magicFunction(digits2)
// gives 3735928559
去encoding/hex
package seems like it can only convert to a byte array (with Decode
or DecodeString
).
我可以将 rune 数组转换为字符串,然后使用 DecodeString,但我不知道如何从它生成的字节数组中获取整数。该数组将是固定长度 (8),所以我不需要可变数组,我想要单个值!
如果没有重新实现十六进制解码算法,是否有 proper/good 方法来做到这一点?
请注意,在 [8]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 时,将符文转换为其数值,然后将其与变量按位或。
给定一个以十六进制编码的字符串形式的符文数组,我如何将其转换为单个整数。例如:
var digits [8]rune = "00000010"
magicFunction(digits)
// gives 16
var digits2 [8]rune = "deadbeef"
magicFunction(digits2)
// gives 3735928559
去encoding/hex
package seems like it can only convert to a byte array (with Decode
or DecodeString
).
我可以将 rune 数组转换为字符串,然后使用 DecodeString,但我不知道如何从它生成的字节数组中获取整数。该数组将是固定长度 (8),所以我不需要可变数组,我想要单个值!
如果没有重新实现十六进制解码算法,是否有 proper/good 方法来做到这一点?
请注意,在 [8]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 时,将符文转换为其数值,然后将其与变量按位或。