gpt4 book ai didi

go - 使用Fprintf时发送的字节差异

转载 作者:行者123 更新时间:2023-12-01 22:39:44 25 4
gpt4 key购买 nike

要求:当我发送以下十六进制消息时,我想得到“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/UNLsLdLk6g0

import (
"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))

}

产生以下输出,这不是预期的,即使打印时的字节看起来是4
13 bytes written.
[66 20 114 37]
00000000 42 14 72 25 |B.r%|

在第二个示例中需要发送4个字节-请使用相同的内容帮助我

注意:为什么我在这里使用Fprintf?我需要通过TCP套接字发送此消息,但是对于上面的示例-我将相同的十六进制消息发送给stdout,以便我们轻松查看。只要该解决方案可以用于向套接字发送信息-我真的不关心它的Fprintf还是其他东西

最佳答案

如果查看打印的字符串,您会看到问题:

Br%!(NOVERB)

在这里,当最后一个字节是0x25,即'%'时,Fprintf尝试从输入中读取下一个格式化动词,该动词不存在,所以它打印出错误消息!(NOVERB)。那是您的多余字节。代替Fprintf,使用FPrint,它应该打印4个字节。

关于go - 使用Fprintf时发送的字节差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com