ofstream записывает дополнительные нулевые байты в файл на сервере Unix

Почему следующий код записывает четыре байта при запуске на моем локальном компьютере с Windows с помощью Visual C ++, но записывает 4 дополнительных 0 байта при загрузке на Unix-сервер моей школы?

unsigned long temp = 1025;
ofstream file("test", ofstream::binary);
file.write((char*)&temp, sizeof(temp));

Вот результат использования xxd локально: 0104 0000

Вот результат на сервере Unix: 0104 0000 0000 0000

Это проблема с тем, в каком режиме я открываю файл?

2

Решение

long имеет определенный размер реализации. Ваша система Windows использует 32 бита (4 байта) long (даже 64-битная Windows использует 32-битную long; в противном случае это редко можно увидеть в 64-битных ОС), хотя большинство, если не все, 64-битные UNIX-подобные системы, о которых я знаю, имеют 64-битные (8 байт) longs. Так как ты пишешь sizeof(temp) байты и temp является unsigned longвы получите разные размеры вывода в разных системах (вы также можете столкнуться с проблемами порядка байтов при переходе от машин с прямым порядком байтов к машинам с прямым порядком байтов).

Если вам нужен постоянный размер, используйте фиксированные типы ширины из <cstdint>например, uint32_t или же uint64_t,

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]