要求:我想得到“4 個字節已發送” - 當我發送以下十六進制消息時 - 我看到它們適用于一個十六進制消息,但在發送時進行微小更改時不適用于另一個十六進制消息下面的代碼更好地解釋了我的問題 - 首先是按預期發送了 4 個字節的工作十六進制,第二個是發送額外字節的另一個十六進制消息 - 我也需要找出一種方法來為第二個十六進制發送 4 個字節工作六角形: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))}產生以下輸出:4 bytes written.[66 20 114 46]00000000 42 14 72 2e |B.r.|無法使用十六進制 - 僅更改了一個值:(這里需要 4 個字節,但我得到了 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))}產生以下輸出,這不是預期的,即使打印時的字節看起來是 413 bytes written.[66 20 114 37]00000000 42 14 72 25 |B.r%|在第二個示例中需要發送 4 個字節 - 請幫我解決同樣的問題注意:為什么我在這里使用 Fprintf ?我需要通過 TCP 套接字發送此消息,但對于上面的示例 - 我發送相同的十六進制消息,但發送到標準輸出,以便我們輕松查看此消息。只要該解決方案可用于向套接字發送信息 - 我真的不在乎它是 Fprintf 還是其他東西
1 回答

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