我需要将16位整数写入文件。 fstream只写字符。因此,我需要将整数转换为char - 实际的整数,而不是表示整数的字符(即0应该是0x00,而不是0x30)我尝试了以下内容:
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 :(得分: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));