C++:字符串到字符数组的转换(删除了非 ASCII 字符)
C++ : String to Character Array conversion (non-Ascii characters removed)
我有一个有效负载字符串,我想将其转换为字符数组,然后从中删除任何非 ASCII 字符。这是我的代码:
bool invalidChar (char c)
{
return !(c>=0 && c <256);
}
void stripUnicode(string &str)
{
str.erase(remove_if(str.begin(),str.end(), invalidChar), str.end());
}
Payload_input 是由 ASCII 和非 ASCII 字符组成的字符串:
stripUnicode(Payload_input) ;
char input[Payload_input.length()];
strcpy(input,Payload_input.c_str());
char chunk1[Payload_input.length()];
int counter1=0;
for(counter1=0; counter1< size; counter1++)
{
chunk1[counter1]=input[counter1];
}
现在,这是我想要转换为字符数组的字符串有效负载:
--90B452BFFF3F395ABDC878D8BEDBD152
Content-Disposition: form-data; name="uploaddir"
language/2BB5B9330E/C/
--90B452BFFF3F395ABDC878D8BEDBD152
Content-Disposition: form-data; name="filename"; filename="lottery[1]20110727082525.jpg"
Content-Type: text/plain
Content-Transfer-Encoding: binary
JFIFddDucky<http://ns.adobe.com/xap/1.0/<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
在上面的字符串中,Content-Transfer-Encoding: 二进制之后的几个字符出现在 linux 终端上的块中(在块内写为 0001 等)。
当我尝试在从字符串中删除非 ASCII 字符后打印字符(cout <<chunk1[counter1])时,甚至一些 ASCII 字符在内容传输编码:二进制行后也被省略。
如果我的代码有问题,请指出来?
问题是在
Linux 上char
总是在 -128-127 范围内,所以你的 invalidChar
函数将为所有不是严格 ASCII 的字符返回true
。如果你想检查扩展的ASCII(0-255),那么你的函数是无用的:每个char
值都在扩展的ASCII集中;但是,由于char
是签名的,因此您需要检查负值。
相关文章:
- 在C++的字符串中搜索和删除某些字符
- 删除/替换C++字符串中的多字符 (ÿû)
- 如何删除字符串中的前 2 个字符(如果它有"-")
- 如何在 getline 中删除/忽略超过特定数字的字符?
- 如何在 c++ 中删除字符串中的某些字符?
- 从双引号括起来的子字符串中删除特定字符
- 如何从字符数组(不是字符串数组)中删除符号
- C++ 从 std::string 中删除所有非数字字符
- xcode 从源代码中删除奇怪的控制字符
- C++从句子中删除给定字符的程序不起作用
- 正在从C++中的字符数组中删除字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- C++从字符末尾删除值
- 从字符数组中删除双空格
- 循环以从字符数组中删除过多的空格 (C++)
- 如何删除新分配的字符,这也是函数返回值?
- 删除字符串向量中的字符重复
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 删除以前打印的字符
- 回文查找器:非字母数字字符删除问题