请教如何将字符串 `"20181105133155148224"`转成 `[]byte{0x20, 0x18, 0x11, 0x05, 0x13, 0x31, 0x55, 0x14, 0x82, 0x24}`

请教如何便捷的将字符串 "20181105133155148224"转成 []byte{0x20, 0x18, 0x11, 0x05, 0x13, 0x31, 0x55, 0x14, 0x82, 0x24}, 效果类似php中的pack("H*", "20181105133155148224")

共 7 个回复


jimmykuu

[]byte("20181105133155148224")

# 0

micross

@jimmykuu 感谢回答。不过 []byte("20181105133155148224")得到的结果是
[]byte{0x32, 0x30, 0x31, 0x38, 0x31, 0x31, 0x30, 0x35, 0x31, 0x33, 0x33, 0x31, 0x35, 0x35, 0x31, 0x34, 0x38, 0x32, 0x32, 0x34}

而我期望的结果是
[]byte{0x20, 0x18, 0x11, 0x05, 0x13, 0x31, 0x55, 0x14, 0x82, 0x24}

就是将20181105133155148224每2个数字拆开成20, 18, 11, 05, 13, 31, 55, 14, 82, 24,然后分别表示成16进制

# 1

rocket

一个例子

package main

import (
    "fmt"
    "strconv"
)

func main() {
    v, err := strconv.ParseInt("18", 16, 8)
    fmt.Println(v, err)
}
# 2

jimmykuu

前面理解错了,Go 标准库有这个包

package main

import (
    "encoding/hex"
    "fmt"
    "log"
)

func main() {
    const s = "20181105133155148224"
    decoded, err := hex.DecodeString(s)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(decoded)
}
# 3

micross

@rocket 谢谢哈。20181105133155148224很大的数呢,ParseInt是会超出范围的,即使在int的表示范围之内,也是得不到我要的结果的哈。我的这个需求比较奇葩,因为在对接一批第三方的物联网设备,对方的协议定的好奇怪

# 4

micross

@jimmykuu 非常感谢!是这样的。我对标准包了解太少了,惭愧

# 5

rocket

我的代码是每次解析2位的

# 6