0

我在解析 char[] 的内容时遇到问题。它包含字节,可以格式化为 ASCII 字符串。然而,最后两个字节是 CRC。因此,我将除数组中最后两个条目之外的所有内容都以十六进制格式解释为字符串:

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?

最好的,马吕斯

4

2 回答 2

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]);
}

那就是第二个循环应该在第一个循环之外。

于 2012-06-05T10:38:31.093 回答
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]);
     }
}
于 2012-06-05T10:38:20.463 回答