2012-06-05 75 views
0

解析char []的内容时出现问题。它包含字节,可以被格式化为ASCII码。然而最后两个字节是CRC。因此,我解释一切,但最后两个条目数组中的十六进制字符串:将unsigned char []解析为std :: string

std::ostringstream payload; 
std::ostringstream crc; 
payload << std::hex; 
crc << std::hex; 

// last two bytes are CRC 
for (int i = 0; i < this->d_packetlen - 2; i++) 
    { 
    payload << static_cast<unsigned>(this->d_packet[i]); 

    for (int j = i; j < this->d_packetlen; i++) 
     { 
     crc << static_cast<unsigned>(this->d_packet[j]); 
     } 
} 
std::string payload_result = payload.str(); 
std::string crc_result = crc.str(); 

fprintf(d_new_fp, "%s, %s, %d, %d\n", payload_result.c_str(), 
    crc_result.c_str(), this->d_lqi, this->d_lqi_sample_count); 

这不工作,我不知道这是为什么?有没有一种更简单的方法来将不带符号的字符转换为ASCII?

最佳, 马吕斯

+3

定义“不起作用”。不编译?不链接?不运行?运行但产生错误的结果? –

+0

它输出垃圾。绝对不是ASCII,但这就是我的目标。虽然在那里有字节格式的ASCII值。 – wishi

+0

'unsigned char's是ASCII字符或非ASCII字符,不能转换为ASCII字符。 – Gandaro

回答

3

这是一个无限循环:

for (int j = i; j < this->d_packetlen; i++) 
{ 
    crc << static_cast<unsigned>(this->d_packet[j]); 
} 

在这个循环中,你是不是递增j;相反,你正在增加i。也许,这是问题所在?


而且,你所描述的问题的方式,我认为正确的解决办法是这样的:

for (int i = 0; i < this->d_packetlen - 2; i++) 
{ 
    payload << static_cast<unsigned int>(this->d_packet[i]); 
} 
for (int j = this->d_packetlen - 2; j < this->d_packetlen; j++) 
{ 
    crc << static_cast<unsigned int>(this->d_packet[j]); 
} 

这是第二循环应该是第一个循环之外。

2

我认为问题是,你的嵌套循环增量i代替j

for (int i = 0; i < this->d_packetlen - 2; i++) 
{ 
payload << static_cast<unsigned>(this->d_packet[i]); 

    for (int j = i; j < this->d_packetlen; i++ /* <=== HERE */) 
    { 
     crc << static_cast<unsigned>(this->d_packet[j]); 
    } 
} 
相关问题