Я пытаюсь написать некоторый независимый от процессора код для записи файлов с прямым порядком байтов. У меня есть пример кода ниже, и я не могу понять, почему он не работает. Все, что он должен сделать, это позволить байту хранить каждый байт данных один за другим в порядке с прямым порядком байтов. В моей настоящей программе я бы тогда записал отдельный байт в файл, чтобы получить одинаковый порядок байтов в файле независимо от архитектуры процессора.
#include <iostream>
int main (int argc, char * const argv[]) {
long data = 0x12345678;
long bitmask = (0xFF << (sizeof(long) - 1) * 8);
char byte = 0;
for(long i = 0; i < sizeof(long); i++) {
byte = data & bitmask;
data <<= 8;
}
return 0;
}
По какой-то причине байт всегда имеет значение 0. Это меня смущает, я смотрю на отладчик и вижу это:
data = 00010010001101000101011001111000
битовая маска = 11111111000000000000000000000000
Я бы подумал, что data & mask даст 00010010, но он просто делает байт 00000000 каждый раз! Как его можно? Я написал некоторый код для порядка с прямым порядком байтов, и это прекрасно работает, см. Ниже:
#include <iostream>
int main (int argc, char * const argv[]) {
long data = 0x12345678;
long bitmask = 0xFF;
char byte = 0;
for(long i = 0; i < sizeof(long); i++) {
byte = data & bitmask;
data >>= 8;
}
return 0;
}
Почему порядок с прямым порядком байтов работает, а порядок с прямым порядком нет? Спасибо за любую помощь: -)