C ++ приведение и запись без знака int со значением 10 дает 5 байтов - PullRequest
0 голосов
/ 01 июня 2018

Следующий код приводит к двоичному файлу, который в качестве дополнительного байта перед представлением значения 10.

int main()
{
    unsigned int data0 = 8;
    unsigned int data1 = 9;
    unsigned int data2 = 10;
    unsigned int data3 = 11;
    std::ofstream file("test.bin", std::ios_base::out, std::ios_base::binary);
    file.write(reinterpret_cast<char*>(&data0), sizeof(data0));
    file.write(reinterpret_cast<char*>(&data1), sizeof(data1));
    file.write(reinterpret_cast<char*>(&data2), sizeof(data2));
    file.write(reinterpret_cast<char*>(&data3), sizeof(data3));
    file.close();
    return 0;
}

Вот как выглядит hexdump файла:

 08 00 00 00 09 00 00 00 0D 0A 00 00 00 0B 00 00 00
| 8 -> OK   | 9 -> OK   |??| 10 -> OK  | 11 -> OK         

Что здесь происходит с байтом перед 10?

1 Ответ

0 голосов
/ 01 июня 2018
std::ofstream file("test.bin", std::ios_base::out, std::ios_base::binary);

должно быть

std::ofstream file("test.bin", std::ios_base::out | std::ios_base::binary);

Кредит переходит к пользователю 4581301.Смотрите комментарии к вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...