У меня тут какая-то странная проблема!
Я пытаюсь написать таблицу цветов для 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 ...
Есть ли что-то странное, что происходит с нотацией? Есть ли очевидные ошибки, которые я пропустил? Кто-нибудь сталкивался с чем-то подобным раньше?
Спасибо!