Golang 中国

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


micross 于 2018-11-07 19:06 修改
7 回复
jimmykuu
#1 jimmykuu • 2018-11-07 20:10

[]byte("20181105133155148224")

micross
#2 micross • 2018-11-08 09:39

@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进制

rocket
#3 rocket • 2018-11-08 09:57

一个例子

package main

import (
    "fmt"
    "strconv"
)

func main() {
    v, err := strconv.ParseInt("18", 16, 8)
    fmt.Println(v, err)
}
jimmykuu
#4 jimmykuu • 2018-11-08 10:09

前面理解错了,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)
}
micross
#5 micross • 2018-11-08 10:12

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

micross
#6 micross • 2018-11-08 10:15

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

rocket
#7 rocket • 2018-11-08 10:19

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

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。