gpt4 book ai didi

C++ (Visual Studio),无法将数字 '10' 写入文件,所有其他数字都有效吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:54 25 4
gpt4 key购买 nike

我这里有个奇怪的问题!我正在尝试为 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
}

当我查看使用十六进制编辑器获得的输出时,一切看起来都很好,直到我到达数字 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...

符号有什么奇怪的地方吗?我遗漏了任何明显的错误吗?有没有人遇到过这样的事情?谢谢!

最佳答案

ASCII 中的“数字 10”是换行符,\n。在 C++ 中,这是换行符。

您显然已将文件作为文本流打开。由于换行符在不同平台上的表示方式不同,文本流执行换行符转换:在读取时,它们将特定于平台的换行符表示转换为 \n,而在写入时,它们将转换为 \n字符转换为特定于平台的换行表示。

在 Windows 上,换行符由 \r\n 表示。当您将 \n 写入文本流时,它会被写为 \r\n

要写入原始二进制数据,您需要将流作为二进制流打开。这是通过将 ios_base::binary 标志传递给流的构造函数来完成的。

关于C++ (Visual Studio),无法将数字 '10' 写入文件,所有其他数字都有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4972815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com