要求:我想得到“4 個字節(jié)已發(fā)送” - 當(dāng)我發(fā)送以下十六進(jìn)制消息時 - 我看到它們適用于一個十六進(jìn)制消息,但在發(fā)送時進(jìn)行微小更改時不適用于另一個十六進(jìn)制消息下面的代碼更好地解釋了我的問題 - 首先是按預(yù)期發(fā)送了 4 個字節(jié)的工作十六進(jìn)制,第二個是發(fā)送額外字節(jié)的另一個十六進(jìn)制消息 - 我也需要找出一種方法來為第二個十六進(jìn)制發(fā)送 4 個字節(jié)工作六角形:import ( "fmt" "os" "encoding/hex")func main() { hexString, _ := hex.DecodeString("4214722e") n, err := fmt.Fprintf(os.Stdout, string(hexString)) // The n and err return values from Fprintf are // those returned by the underlying io.Writer. if err != nil { fmt.Fprintf(os.Stderr, "Fprintf: %v\n", err) } fmt.Printf("\n%d bytes written.\n", n) fmt.Println([]byte(hexString)) fmt.Println(hex.Dump(hexString))}產(chǎn)生以下輸出:4 bytes written.[66 20 114 46]00000000 42 14 72 2e |B.r.|無法使用十六進(jìn)制 - 僅更改了一個值:(這里需要 4 個字節(jié),但我得到了 13)https://play.golang.org/p/UNLsLdLk6g0import ( "fmt" "os" "encoding/hex")func main() { hexString, _ := hex.DecodeString("42147225") n, err := fmt.Fprintf(os.Stdout, string(hexString)) // The n and err return values from Fprintf are // those returned by the underlying io.Writer. if err != nil { fmt.Fprintf(os.Stderr, "Fprintf: %v\n", err) } fmt.Printf("\n%d bytes written.\n", n) fmt.Println([]byte(hexString)) fmt.Println(hex.Dump(hexString))}產(chǎn)生以下輸出,這不是預(yù)期的,即使打印時的字節(jié)看起來是 413 bytes written.[66 20 114 37]00000000 42 14 72 25 |B.r%|在第二個示例中需要發(fā)送 4 個字節(jié) - 請幫我解決同樣的問題注意:為什么我在這里使用 Fprintf ?我需要通過 TCP 套接字發(fā)送此消息,但對于上面的示例 - 我發(fā)送相同的十六進(jìn)制消息,但發(fā)送到標(biāo)準(zhǔn)輸出,以便我們輕松查看此消息。只要該解決方案可用于向套接字發(fā)送信息 - 我真的不在乎它是 Fprintf 還是其他東西
1 回答

哈士奇WWW
TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊
如果您查看打印的字符串,您可以看到問題:
Br%!(NOVERB)
在這里,當(dāng)最后一個字節(jié)是 0x25(即“%”)時,F(xiàn)printf 嘗試從輸入中讀取下一個格式化動詞,但該動詞不存在,因此它打印出錯誤消息!(NOVERB)。那是你的額外字節(jié)。使用 FPrint 代替 Fprintf,它應(yīng)該打印 4 個字節(jié)。
- 1 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消