在C/ c++中处理套接字时,等效于Python ASCII编码的字节字符串是什么?



我对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的向后兼容超集),因此不需要对这些类型的字符串进行编码或解码。

最新更新