将16位整数转换为char数组? (C ++)

时间:2016-01-23 15:39:41

标签: c++ arrays type-conversion

我需要将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;
}

这似乎很慢。当然有一种更有效,更少黑客的转换方式吗?

1 个答案:

答案 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));