Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将int写入二进制文件_C++ - Fatal编程技术网

C++ 将int写入二进制文件

C++ 将int写入二进制文件,c++,C++,我想将短int x=0x4740写入二进制文件,格式为:0100 0000 0100 0111,在记事本中打开时为@G。它起作用了。例如,当我尝试编写short int a=0xf0ff时;(二进制:1111 0000 1111 1111),记事本显示的是“˙đ”,它实际上不是我的数字二进制(˙đ是1100 1011 1001 1001 1100 0100 1001 0001)。如何写入它并在该文件中获取1111 0000 1111 1111 我正在使用这个转换器: intmain(){ 流纹层

我想将短int x=0x4740写入二进制文件,格式为:0100 0000 0100 0111,在记事本中打开时为@G。它起作用了。例如,当我尝试编写short int a=0xf0ff时;(二进制:1111 0000 1111 1111),记事本显示的是“˙đ”,它实际上不是我的数字二进制(˙đ是1100 1011 1001 1001 1100 0100 1001 0001)。如何写入它并在该文件中获取1111 0000 1111 1111

我正在使用这个转换器:

intmain(){
流纹层;
plik.open(“D:\\book.dat”,ios::binary);

如果(!plik.good())不能您的代码将正确地将该数字写入该文件,但您必须注意,在当今的大多数体系结构中,数字都存储在该文件中

也就是说,内存中的
short int x=0xf0ff;
0xff 0xf0
,而不是您可能期望的
0xf0 0xff

如果您尝试使用十六进制编辑器打开文本文件,则文本文件实际上将包含
0xff 0xf0
。 这相当于二进制中的
11111111111000
(而不是
111100001111111111

然后,您的文本编辑器将
0xff 0xf0
解释为
˙273;


现在,如果要在文件中写入
1111 0000 1111 1111
,则必须“反向”写入数字或直接使用字符数组:

short int x=0xfff0
char plik[]={0xf0,0xff};


请注意,并非所有体系结构都是little endian,因此,如果您关心可移植性,建议使用字符数组。

您的代码将正确地将该数字写入该文件,但您必须注意,现在在大多数体系结构中,数字都存储在

也就是说,内存中的
short int x=0xf0ff;
0xff 0xf0
,而不是您可能期望的
0xf0 0xff

如果您尝试使用十六进制编辑器打开文本文件,则文本文件实际上将包含
0xff 0xf0
。 这相当于二进制中的
11111111111000
(而不是
111100001111111111

然后,您的文本编辑器将
0xff 0xf0
解释为
˙273;


现在,如果要在文件中写入
1111 0000 1111 1111
,则必须“反向”写入数字或直接使用字符数组:

short int x=0xfff0
char plik[]={0xf0,0xff};


请注意,并非所有体系结构都是little endian,因此,如果您关心可移植性,建议使用字符数组。

您的代码将正确地将该数字写入该文件,但您必须注意,现在在大多数体系结构中,数字都存储在

也就是说,内存中的
short int x=0xf0ff;
0xff 0xf0
,而不是您可能期望的
0xf0 0xff

如果您尝试使用十六进制编辑器打开文本文件,则文本文件实际上将包含
0xff 0xf0
。 这相当于二进制中的
11111111111000
(而不是
111100001111111111

然后,您的文本编辑器将
0xff 0xf0
解释为
˙273;


现在,如果要在文件中写入
1111 0000 1111 1111
,则必须“反向”写入数字或直接使用字符数组:

short int x=0xfff0
char plik[]={0xf0,0xff};


请注意,并非所有体系结构都是little endian,因此,如果您关心可移植性,建议使用字符数组。

您的代码将正确地将该数字写入该文件,但您必须注意,现在在大多数体系结构中,数字都存储在

也就是说,内存中的
short int x=0xf0ff;
0xff 0xf0
,而不是您可能期望的
0xf0 0xff

如果您尝试使用十六进制编辑器打开文本文件,则文本文件实际上将包含
0xff 0xf0
。 这相当于二进制中的
11111111111000
(而不是
111100001111111111

然后,您的文本编辑器将
0xff 0xf0
解释为
˙273;


现在,如果要在文件中写入
1111 0000 1111 1111
,则必须“反向”写入数字或直接使用字符数组:

short int x=0xfff0
char plik[]={0xf0,0xff};


请注意,并非所有体系结构都是little-endian,因此如果您关心可移植性,建议使用字符数组。

您的代码可以。但是,使用记事本解释二进制数据却不行。简而言之,在使用记事本查看文件时,不应将Unicode值用于非ASCII字符(如đ)

记事本以8位编码读取文件,使用(可能是)在Windows区域和语言设置中配置的非Unicode程序的代码页

现在,在(我猜这是在您的语言环境中配置的)中,đ的代码为0xf0,˙的代码为0xff。因此,文件内容为0xff 0xf0,这正是您所期望的


我建议使用一些更高级的工具来检查二进制文件的内容。

您的代码还可以。但是,使用记事本解释二进制数据却不行。简而言之,当使用记事本查看文件时,您不应该对非ASCII字符(如đ)使用Unicode值

记事本以8位编码读取文件,使用(可能是)在Windows区域和语言设置中配置的非Unicode程序的代码页

现在,在(我猜这是在您的语言环境中配置的)中,đ的代码为0xf0,˙的代码为0xff。因此,文件内容为0xff 0xf0,这正是您所期望的


我建议使用一些更高级的工具来检查二进制文件的内容。

您的代码还可以。但是,使用记事本解释二进制数据却不行。简而言之,当使用记事本查看文件时,您不应该对非ASCII字符(如đ)使用Unicode值

记事本以8位编码读取您的文件,使用(大概)在Windows区域和Lan中配置的非Unicode程序的代码页
int main() {

ofstream plik;
plik.open("D:\\book.dat", ios::binary);
if (!plik.good()) cout << "error";

short int x = 0xf0ff;

plik.write(reinterpret_cast<char*>(&x), 2);
plik.close();

system("pause");
return 0;
}