我想通过网络使用套接字发送'info\r\n'到redis服务器,发送数据是69 6e 66 6f 5c 72 5c 6e但我想发送数据是69 6e 66 6f 0d 0a,\r\n被视为一个字符串错误变成 5c 72 5c 6e发送数据是代码中的字符串我将字符串转换为 []byte 和 conn.write这个发送似乎是错误的,正确的发送方法是什么?
1 回答

30秒到达战场
TA贡献1828条经验 获得超6个赞
您的数据69 6e 66 6f 5c 72 5c 6e是:
b := []byte{0x69, 0x6e, 0x66, 0x6f, 0x5c, 0x72, 0x5c, 0x6e}
fmt.Printf("%q\n", string(b))
哪个输出:
"info\\r\\n"
它包含一个反斜杠、一个r、另一个反斜杠和一个n字符。
你想发送一个回车\r和一个换行符\n,你不必发送这些“字面意思”。\r并且\n是单字节数据,而不是 2 字符序列。
您的数据应该是:
b = []byte{0x69, 0x6e, 0x66, 0x6f, '\r', '\n'}
fmt.Printf("%q\n", string(b))
哪个输出:
"info\r\n"
或者简单地说:
b = []byte("info\r\n")
fmt.Printf("%q\n", string(b))
哪个输出相同。试试Go Playground上的示例。
知道字符串文字"info\r\n"是解释字符串文字,\r其中的\n序列将被解释为单个字符(回车符和换行符)。这在Spec: String literals中有详细说明。
- 1 回答
- 0 关注
- 254 浏览
添加回答
举报
0/150
提交
取消