我在vc6.0下面需要将一些数据保存到一个二进制文件。
代码如下:ofstream outFile("C:\\Python23\\test\\ctest3.plt",ios::binary);for (i=0;i<1000;i++)
outFile<<hex<<GetValue(i);//函数GetValue(i)返回一个0到255之间的整数但是我发现一个奇怪的问题,就是当数字比较小的时候,保存的数据将变成对应的字符。
例如 当GetValue(i)返回值为1的时候,文件中对应位置的值是0x31,即字符'1'对应的Ascii码值,而不是我所希望的'0x1'。不过当数字较大时,例如255,那么写入文件中的数据便是'0xff',这时又是正确的。同时我还得输入一些字符串到这个文件中,我发现有些特殊字符根本无法输入。例如outFile<<"\x00\x01\x08\x08\x08\x08";
在文件的相应位置,这段内容根本就找不到,也就是说,根本没有写入文件中。百思不得其解。请各位大侠分析原因,给出对策。
代码如下:ofstream outFile("C:\\Python23\\test\\ctest3.plt",ios::binary);for (i=0;i<1000;i++)
outFile<<hex<<GetValue(i);//函数GetValue(i)返回一个0到255之间的整数但是我发现一个奇怪的问题,就是当数字比较小的时候,保存的数据将变成对应的字符。
例如 当GetValue(i)返回值为1的时候,文件中对应位置的值是0x31,即字符'1'对应的Ascii码值,而不是我所希望的'0x1'。不过当数字较大时,例如255,那么写入文件中的数据便是'0xff',这时又是正确的。同时我还得输入一些字符串到这个文件中,我发现有些特殊字符根本无法输入。例如outFile<<"\x00\x01\x08\x08\x08\x08";
在文件的相应位置,这段内容根本就找不到,也就是说,根本没有写入文件中。百思不得其解。请各位大侠分析原因,给出对策。
解决方案 »
- 旋转循环、sizeof 问题
- 公司封了BT和电驴,迅雷等协议的下载方式,导致了很多资源无法利用,怎么办?
- 作为2010年3月11日起的最早的一个程序员
- 还是关于条件编译
- 请问,如何分析IPv6的报头?
- 各位问下 想学 Windows编程 一些API函数的调用该买哪本书啊?
- 问两个问题!~大家帮帮忙!~
- 这是什么怪问题???????
- 紧急求助:我用向导作的一个MDI程序,要把其ToolBar的每个按钮下面加一个字符串,就绪IE的toolBar一样
- DLL大牛看过来
- 我想学习计算机编程,从何学起?
- 求一个自己写的button, 不是那种重载drawitem. 也不要用window系统的button, 就是完全自己画出来的button.
for (i=0;i<1000;i++)
outFile<<hex<<(char)GetValue(i);
int 型<<会输出它的串
outFile<<"\x00\x01\x08\x08\x08\x08";
不会有输出,因为"\x00\x01\x08\x08\x08\x08";
为一串,而<<输出串时会判0,
这样可以
outFile<<(char )0;
outFile<<"\x01\x08\x08\x08\x08" //字符串中不能有0
outFile<<(byte)GetValue(i);
至于那个特殊的字符串,我素性用
outFile<<(BYTE)'\x00'<<(BYTE)'\x01'<<(BYTE)'\x08'<<(BYTE)'\x08'<<(BYTE)'\x08'<<(BYTE)'\x08';虽然程序实在够ugly,但是先解决问题再说。
不过,我对其中的机理仍然不是很理解,希望哪位能够指明方向。
会调用OSTRCHAR.CPP中的
ostream& ostream::operator<<(unsigned char c)
if (opfx())
osfx();而如果是int话
会调用OSTRINT.CPP中的
ostream& ostream::operator<<(int n)
_WINSTATIC char fmt[4] = "%d";
sprintf(obuffer,fmt,n);
然后再写入所以建议,直接返回char或byte
对0用(char)特殊处理,其余直接输出,如
outFile<<(char)0<<"\x01\x08\x08\x08\x08";