2016-01-23 77 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