我在解析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?
最佳, 的Marius
答案 0 :(得分: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]);
}
这是第二个循环应该在第一个循环之外。
答案 1 :(得分: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]);
}
}