2016-01-23 206 views
2

我需要將16位整數寫入文件。 fstream只能寫入字符。因此,我需要將整數轉換爲char - 實際整數,而不是表示整數的字符(即,0應該是0x00時,不的0x30)我嘗試以下:將16位整數轉換爲char數組? (C++)

char * chararray = (char*)(&the_int); 

然而這產生一個向後陣列兩個字符。單個字符不會翻轉,但字符的順序是。因此我創建了這個功能:

char * inttochar(uint16_t input) 
{ 
    int input_size = sizeof(input); 
    char * chararray = (char*)(&input); 
    char * output; 
    output[0]='\0'; 
    for (int i=0; i<input_size; i++) 
    { 
     output[i]=chararray[input_size-(i+1)]; 
    } 
    return output; 
} 

這看起來很慢。當然,有一種更高效,不太冒險的方式來轉換它?

+0

你可以簡單地做'˚F<< i'其中'F'是你的'ofstream'和'i'是你的整數。如果你想要十六進制,你可以做'f <<「0x」<< std :: hex << i'。 –

+0

我需要將其轉換爲實際整數,而不是表示整數的字符。該方法會將整數轉換爲表示整數的字符。 – Nick

+0

因爲它太無關緊要,而成爲無題的投票。 –

回答

2

這裏有點難以理解你在這裏問的問題(也許這只是我,儘管我也收集了評論員的觀點)。

你寫

fstream的只寫人物

這是事實,但並不一定意味着你需要明確創建一個字符數組。

例如,如果你有一個fstream對象f(以二進制方式打開),您可以使用write方法:

uint16_t s; 
... 
f.write(static_cast<const char *>(&s), sizeof(uint16_t)); 

正如其他人所指出的,當你序列號,通常支付使用普遍接受的順序。因此,使用htons(請參閱您的操作系統的庫文件):

uint16_t s; 
... 
const uint16_t ns = htons(s); 
f.write(static_cast<const char *>(&ns), sizeof(uint16_t)); 
+0

@Nick查看答案中的更新。 –

+0

好的,會的,謝謝。 – Nick

+0

哦,順便說一句 - 如果其他人有這個問題 - 我不認爲靜態轉換在那裏有效(至少對我來說不是這樣)。也許它應該改成reinterpret_cast或者只是(char *)( &NS)? – Nick