c++ - 在处理套接字时,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
因此,接收也需要任何解码?
解决方案
请告诉我我是否正确理解了您的问题。您正在尝试发送和接收字节。如果您的 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”
推荐阅读
- javascript - 引用错误变量未在 Object forEach 上定义
- .net-core - 包“Microsoft.AspNet.WebApi.Core 5.2.7”已使用“.NETFFramework,Version=v4.6.1”恢复
- python - 如何为 Python 程序设置 key 和 value 的限制
- ios - 启动appium时应用打开和关闭3次
- php - 如何使用 SplDoublyLinkedList 模仿这种双向链表动画?
- machine-learning - 多任务学习和多模型学习有什么区别?
- laravel - 在 Laravel 5.8 中安装 MDB Vue
- docker - 将 AdminApp 部署到 Websphere 9 Docker 时出现错误 401
- python - 尽管存在更快的互联网和元素,但 WebDriverWait 的超时异常
- python - 使用 Arcpy 从 ArcMap 导出向 PDF 添加边框