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

标签 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;
}

这看起来很慢。肯定有一种更有效、更不那么麻烦的方法来转换它吗?

最佳答案

有点难以理解你在这里问的问题(也许这只是我的问题,尽管我认为评论员也这么认为)。

你写

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/

相关文章:

c++ - 如何从 C++(跨平台)运行 mercurial 查询?

c++ - 在 C++ 中,获取/释放原子访问与宽松访问与栅栏相结合之间是否存在任何有效区别?

c - 致命信号 11 退出状态

javascript - 从 javascript 数组中删除数字范围

python - Pandas Dataframe 到带有元组的列表字典

c++ - 如何修复没有匹配函数 ifstream 错误?

c++ - SDL2 : Render engine design

r - 惯用的矩阵类型转换,比如将整数 (0/1) 矩阵转换为 bool 矩阵

ios - 删除一个元素后数组索引不更新

java - 数组到列表的转换和类型转换