首页 > 解决方案 > 在处理套接字时,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+'\0','ascii'))
,我知道如果使用网络套接字等低级数据连接,Python 3 将数据作为字节字符串传输:数据类型字节。

突然间,我在想这个命令将如何由 ac/c++ 客户端实现,但我对缓冲区的编码/解码部分感到困惑。

我们以以下基于 poco 库的客户端为例

https://searchcode.com/codesearch/view/25852263/

在所有示例中,缓冲区都是字符数组。

我想问的是,如果有人想用上述之一的 c++ 替换 python 客户端,那么发送和接收部分保持不变?

前任

int n = ss.sendBytes("hello", 5);
char buffer[256];
n = ss.receiveBytes(buffer, sizeof(buffer));

这意味着默认情况下 C char 数组是 ascii 编码的?

或者应该在发送缓冲区之前将例如 ascii 字符串转换为字节数组,如下例所示:

https://www.includehelp.com/c/convert-ascii-string-to-byte-array-in-c.aspx

因此,接收也需要任何解码?

标签: c++sockets

解决方案


请告诉我我是否正确理解了您的问题。您正在尝试发送和接收字节。如果您的 API 采用char[]数组,则不应将单个字符转换为字节。

例如,您将传递“C8ICS33”而不是“43 38 49 43 53 33 33”。

有时在 c++ 中,API 会采用一个std::uint8_t[]std::byte[]数组而不是一个字符。std::uint8_t只是一个字节大小的无符号整数。std::byte 有点复杂,但通常没有人使用它们。

所以 TL;DR:不要将你的 char[] 转换为“bytes”


推荐阅读