【发布时间】:2011-02-11 18:46:34
【问题描述】:
我这里有一个奇怪的问题! 我正在尝试为 8 位 windows 3.x 位图文件编写颜色表。我只是希望文件是灰度的,所以我试图写 bbb0, ggg0, rrr0 256 次 where 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
}
当我查看使用十六进制编辑器得到的输出时,一切看起来都很好,直到我到达数字 10,它是这样写的:
...0C 0C 0C 00 0B 0B 0B 00 0D 0A 0D 0A 0D 0A 00 09 09 09 00 08 08 08 00...
不是:
...0C 0C 0C 00 0B 0B 0B 00 0A 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
}
给予:
...0C 0C 0C 00 0B 0B 0B 00 09 09 09 00 09 09 09 00 08 08 08 00...
符号有什么奇怪的地方吗?我错过了任何明显的错误吗?有没有人遇到过这样的事情? 谢谢!
【问题讨论】:
标签: c++ visual-studio-2008 visual-c++ file-io