亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Sscanf 掃描十六進制字符串的子切片?

如何使用 Sscanf 掃描十六進制字符串的子切片?

Go
滄海一幻覺 2022-01-17 10:09:09
我有一個解析函數,它將用以字符串格式給出的數據填充字節數組。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}在Go Playground上評估此函數,返回字節數組的空值。func main() {    d, err := Parse("00ff-ff00-00ff")    fmt.Printf("Value: %+v Error: %s\n", d, err)}產生:Value: [0 0 0 0 0 0] Error: %!s(<nil>)我預計上述方法會返回[0 255 255 0 0 255]。是否有使用 Sscanf 用數據填充字節數組的正確方法?
查看完整描述

2 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

當您運行Sscanf時,它將重新分配 、 和 的指針,a以便它們不再指向它們各自在. 如果您輸出這些變量的值,您會看到這一點:bcbs


fmt.Printf("%v %v %v", a, b, c)

# Outputs [0 255] [255 0] [0 255]

您可以像這樣返回結果:


result := append(a, b...)

result = append(result, c...)

return result, nil


查看完整回答
反對 回復 2022-01-17
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

您可以通過與最初嘗試幾乎相同的方式獲得預期的結果。您的示例的此修改版本產生Value: [0 255 255 0 0 255] Error: <nil>:


package main


import (

    "bytes"

    "fmt"

)


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)


    fmt.Println(a, b, c)

    return bytes.Join([][]byte{a, b, c}, []byte("")), err

}


func main() {

    d, err := parse("00ff-ff00-00ff")

    fmt.Printf("Value: %+v Error: %v\n", d, err)

}


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 235 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號