2012-06-05 80 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]); 
    } 
} 
相關問題