dpkk8687 2016-05-31 00:52
浏览 109
已采纳

如何使用子切片和Sscanf一起扫描十六进制字符串?

I have a parsing function that will fill a byte array with data given in a string format.

func Parse(data string) ([]byte, error) {
    bs := make([]byte, 6)

    // Create sub slices over larger slice
    a := bs[0:2]
    b := bs[2:4]
    c := bs[4:6]

    // Attempt to scan each string value into their respective slices
    _, err := fmt.Sscanf(data, "%4x-%4x-%4x", &a, &b, &c)

    return bs, err
}

Evaluating this function on the Go Playground the null value of the byte array is returned.

func main() {
    d, err := Parse("00ff-ff00-00ff")
    fmt.Printf("Value: %+v Error: %s
", d, err)
}

Which yields:

Value: [0 0 0 0 0 0] Error: %!s(<nil>)

I expected the above approach to return [0 255 255 0 0 255]. Is there a correct approach to populating a byte array with data using Sscanf?

  • 写回答

2条回答 默认 最新

  • doubi9255 2016-05-31 01:28
    关注

    When you run Sscanf it will re-allocate the pointers for a, b, and c so that they no longer point to their respective locations within bs. You'll see this if you output the values of these variables:

    fmt.Printf("%v %v %v", a, b, c)
    # Outputs [0 255] [255 0] [0 255]
    

    You can return the result like this:

    result := append(a, b...)
    result = append(result, c...)
    return result, nil
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮