C ++:String to Character Array转换(删除非Ascii字符)

时间:2014-03-03 09:06:52

标签: c++

我有一个有效负载字符串,我想将其转换为字符数组,然后从中删除任何非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];
}

现在,这是我想要转换为char数组的字符串有效负载:

--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:binary 之后的几个字符出现在linux终端上的块中(在bloack中它被写成0001等)。

当我在从字符串中剥离非ASCII字符串后尝试打印字符(cout&lt;&lt;&lt;&lt;&lt; chunk1 [counter1])时,甚至一些ASCII字符在行 Content-Transfer-Encoding:binary <之后被省略/强>

如果我的代码有问题,请指出?

1 个答案:

答案 0 :(得分:2)

问题是Linux char始终在-128-127范围内,因此对于所有字符而言,invalidChar函数将返回true,而不是严格的ASCII。如果要检查扩展ASCII(0-255),那么您的函数是无用的:每个char值都在扩展的ASCII集中;但是,由于char已签名,您需要检查否定值。