V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
mzmxcvbn
V2EX  ›  Go 编程语言

golang 里关于 string 和[]byte 的一个小问题

  •  
  •   mzmxcvbn · 2018-12-28 14:27:34 +08:00 · 3607 次点击
    这是一个创建于 2156 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚开始学 Go 现在有 s = "4e722e3137"的字符串。
    我想把 s 转成 []byte{0x4e, 0x72, 0x2e, 0x31, 0x37} 这样的形式,也就是[78 114 46 49 55],也就是字符串里的每两个字符表示成 1 个字节。
    但直接[]byte("4e722e3137")出来的是[52 101 55 50 50 101 51 49 51 55]。

    我现在用这样的方法能勉强达到要求:

    baseData = []byte("4e722e3137")
    var res []byte
    for i:=0; i<=len(baseData); i=i+2 {
        raw := string(baseData[i:i+2])
        i, _ := strconv.ParseInt(raw, 16, 8)
        res = append(res, byte(i))
    }
    

    但感觉这样确实很蠢,而且性能也不佳,我想问一下有没有更好的方法能转成我需要的格式

    6 条回复    2018-12-28 15:01:23 +08:00
    xj577
        1
    xj577  
       2018-12-28 14:37:55 +08:00
    hex.DecodeString("4e722e3137")
    GeruzoniAnsasu
        2
    GeruzoniAnsasu  
       2018-12-28 14:38:01 +08:00
    anying
        3
    anying  
       2018-12-28 14:38:06 +08:00
    data, err := hex.DecodeString("4e722e3137")
    coyove
        4
    coyove  
       2018-12-28 14:39:02 +08:00
    以 go 的设计理念来说你的写法没什么不对的,记得检查一下 ParseInt 返回的 err
    maichael
        5
    maichael  
       2018-12-28 14:44:39 +08:00
    同上,用 hex.DecodeString
    mzmxcvbn
        6
    mzmxcvbn  
    OP
       2018-12-28 15:01:23 +08:00
    解决了,谢谢楼上的各位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:10 · PVG 13:10 · LAX 21:10 · JFK 00:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.