【发布时间】:2016-04-30 03:43:20
【问题描述】:
我需要将 16 位整数写入文件。 fstream 只写入字符。因此我需要将整数转换为 char - 实际整数,而不是表示整数的字符(即 0 应该是 0x00,而不是 0x30)我尝试了以下操作:
char * chararray = (char*)(&the_int);
然而,这会创建一个由两个字符组成的 backwards 数组。单个字符没有翻转,但字符的顺序是。因此我创建了这个函数:
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;
}
这似乎很慢。肯定有更高效、更简单的方法来转换它吗?
【问题讨论】:
-
您可以简单地执行
f << i,其中f是您的ofstream,i是您的整数。如果你想要十六进制而不是你可以做f << "0x" << std::hex << i。 -
我需要将其转换为实际的整数,而不是表示整数的字符。该方法会将整数转换为表示整数的字符。
-
被选为离题,因为它太琐碎了,不是问题。
-
@Cheersandhth.-Alf OP 想要编写二进制、大端(或者准确地说,与他们机器的本机相反的端)。您的提案将产生文本。
-
更紧凑一点:
char arr[2] = {the_int / 256, the_int % 256}; stream.write(arr, 2);
标签: c++ arrays type-conversion