我需要将 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;
}
这看起来很慢。肯定有一种更有效、更不那么麻烦的方法来转换它吗?
最佳答案
有点难以理解你在这里问的问题(也许这只是我的问题,尽管我认为评论员也这么认为)。
你写
fstream only writes characters
确实如此,但并不一定意味着您需要显式创建字符数组。
例如,如果您有一个 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));
关于c++ - 将 16 位整数转换为 char 数组? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965371/