Cha*_*les 4 c++ file-io visual-studio-2008 visual-c++
我这里有一个奇怪的问题!我正在尝试为8位Windows 3.x位图文件编写颜色表.我只是希望文件是灰度的,所以我想写bbb0,ggg0,rrr0 256次,其中r = g = b = 1..256
//write greyscale color table
for (int i = 255; i >= 0; i--) {
writeS = (unsigned short)i;
outfile.write ((char*)&writeS,sizeof(char)); // b
outfile.write ((char*)&writeS,sizeof(char)); // g
outfile.write ((char*)&writeS,sizeof(char)); // r
writeS = 0;
outfile.write ((char*)&writeS,sizeof(char)); // 0
}
Run Code Online (Sandbox Code Playgroud)
当我看到我使用十六进制编辑器得到的输出时,一切看起来都很好,直到我到达数字10,这是这样写的:
... 0C 0C 0C 00 0B 0B 0B 00 0D 0A 0D 0D 0A 00 09 09 09 00 08 08 08 00 ...
不是:
... 0C 0C 0C 00 0B 0B 0B 00 0A 0A 00 09 09 09 00 08 08 08 00 ......
所以很奇怪它只是在这一个数字上做,但更甚事更糟的是,当我改变代码跳过数字10而不是写9时,它就可以了.
//write greyscale color table
for (int i = 255; i >= 0; i--) {
writeS = (unsigned short)i;
if (writeS == 10) writeS = 9;
outfile.write ((char*)&writeS,sizeof(char)); // b
outfile.write ((char*)&writeS,sizeof(char)); // g
outfile.write ((char*)&writeS,sizeof(char)); // r
writeS = 0;
outfile.write ((char*)&writeS,sizeof(char)); // 0
}
Run Code Online (Sandbox Code Playgroud)
得到:
... 0C 0C 0C 00 0B 0B 0B 00 09 09 09 00 09 09 09 00 08 08 08 00 ......
有没有奇怪的东西在那里用符号?我错过了哪些明显的错误?有没有人遇到过这样的事情?谢谢!
Jam*_*lis 13
ASCII中的"数字10"是换行符,\n.在C++中,这是换行符.
您显然已将文件作为文本流打开.由于换行在不同平台上的表示方式不同,因此文本流执行换行:在读取时,它们将特定于平台的换行表示转换为\n写入时,将\n字符转换为特定于平台的换行表示.
在Windows上,换行符由表示\r\n.当你写一个\n文本流时,它被写为\r\n.
要编写原始二进制数据,您需要将流打开为二进制流.这是通过将ios_base::binary标志传递给流的构造函数来完成的.
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |