c++ - C 字符串中的特殊字符和不可打印的 ASCII 的奇怪之处
问题描述
我需要将 c++ 字符串复制到 char 数组中,然后对其进行解码。char 数组不需要以空值结尾。由于编码的性质,许多字符是不寻常的,有些是不可打印的,这会导致问题。
这是 C++ 字符串打印的内容:
std::cout << myString;
输出:
mw\22ypwr\`himg 0few1nvnl
char []
通过执行以下操作将其转换为 a :
char * m = new char[myString.size() + 1];
strcpy(m, myString.c_str());
m*
长度为 24,不正确。它无法正确解码。以下char []
确实正确解码:
char m2 [] = "mw\22ypwr`himg 0few1nvnl";
请注意,这是通过复制字符串的输出创建的。但是,这个 c 字符串的长度只有 22,而不是 24。此外,打印它有以下结果:
std::cout << m;
输出:
mwypwr`himg 0few1nvnl
请注意,\22
消失了。但是,它并不像在将字符串转换为char[]
. 遍历 ASCII 值显示有一个十进制操作码为 的字符,18
以前\22
是 。该字符不打印。
ASCII 值作为十进制:
109 119 18 121 112 119 114 96 104 105 109 103 32 48 102 101 119 49 110 118 110 108
为什么将\22
get 转换为 ASCII 字符 18?如何从具有文字的 C++ 字符串构造正确的、可解码的 C 字符串\22
?我需要能够为大量可能未知的编码字符串执行此操作,因此我不希望\22
在至少不知道为什么会发生这种情况的情况下手动替换为 ASCII 18。
解决方案
推荐阅读
- python - Keras 序列模型 非线性回归模型 错误预测
- java - dynamoDB 映射器扫描()中的错误:java.lang.NullPointerException:null
- java - 如何在 Java MCQ 应用程序中增加每个正确问题的分数
- arrays - 如何将 API 请求数组保存到 Laravel 中的数据库
- python - 如果我使用 Heroku 来托管我的 d.py 机器人,它可以在 mongodb 中写入并保存到我的数据库吗?
- azure - 如何在 Azure Openshift 集群 4.4 中提供自定义域名
- java - 索引 10 超出长度 10 的范围
- mysql - 在动态 MySql 中使用 GROUP_CONCAT
- c# - 什么时候应该在 C# 接口中使用属性?
- python - 我正在扩展页眉和页脚,但是当我在页脚中传递数据时,它只在主页上可见,在其他页面上不可见