【问题标题】:How to convert a fixed-length array of hexadecimal runes to a single integer如何将固定长度的十六进制符文数组转换为单个整数
【发布时间】:2020-07-13 10:54:26
【问题描述】:

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

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

var digits2 [8]rune = "deadbeef"
magicFunction(digits2)
// gives 3735928559

Go 的 encoding/hex 包似乎只能转换为字节数组(使用 DecodeDecodeString)。

我可以将 rune 数组转换为字符串,然后使用 DecodeString,但我不知道如何从它生成的字节数组中获取整数。数组将是固定长度(8),所以我不需要可变数组,我想要一个值!

没有重新实现十六进制解码算法,有没有合适/好的方法来做到这一点?

【问题讨论】:

    标签: arrays go hex rune


    【解决方案1】:

    请注意,在[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 位,将符文转换为其数值并与变量按位或。

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 2017-06-23
      • 2017-07-11
      • 2013-02-27
      • 1970-01-01
      • 2010-10-16
      • 2017-06-10
      相关资源
      最近更新 更多