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条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题