我对C和c++套接字编程的背景一般。
暂时作为一个项目的一部分,我不得不检查Python 3中的套接字编程。
我正在看下面的例子:https://support.mecademic.com/support/solutions/articles/64000253388-python-example-simple-tcp-ip-socket-client
关于命令client.send(bytes(cmd+' ','ascii'))
我理解,如果一个人使用像网络套接字这样的低级数据连接,Python 3将数据传输为字节字符串:数据类型字节。
突然间,我在想这个命令将如何由c/c++客户端实现,但我对缓冲区的编码/解码部分感到困惑。
让我们以以下基于poco库
的客户机为例https://searchcode.com/codesearch/view/25852263/
在所有的例子中缓冲区都是字符数组。
我想问的是,如果有人想用一个c++像上面的一个,那么发送和接收部分保持不变?
e.x
int n = ss.sendBytes("hello", 5);
char buffer[256];
n = ss.receiveBytes(buffer, sizeof(buffer));
意味着默认情况下C字符数组是ascii编码的?
或者应该在发送缓冲区之前将例如ascii字符串转换为字节数组,如下例所示:
https://www.includehelp.com/c/convert-ascii-string-to-byte-array-in-c.aspx
那么接收也需要解码吗?
请告诉我我是否正确理解了你的问题。您正在尝试发送和接收字节。如果您的API采用char[]
数组,那么您不应该将单个字符转换为字节。
例如,您将传递"C8ICS33"Not "43 38 49 43 53 33 33"
有时在c++中,API将接受std::uint8_t[]
或std::byte[]
数组而不是字符。std::uint8_t
只是一个字节大小的无符号整数。Std::byte有点复杂,但通常没有人使用它们。
所以TL;DR:不要将char[]转换为"bytes">
是的,在C和c++中,字符数组通常默认保存ASCII(或UTF-8,就C风格字符串而言,它可以被认为是ASCII的向后兼容超集),因此不需要对这些类型的字符串进行编码或解码。