Пусть L и B - две машины. L упорядочивает свои биты из LSB (Наименьший значащий бит) в MSB (старший значащий бит), а порядок B от MSB к LSB. Или, другими словами, L использует Little Endian, а B использует Big Endian бит - не путать с порядком байтов.
Проблема 1 РЕШЕНА :
Мы пишем следующий код, который мы хотим быть переносимыми:
#include <stdio.h>
int main()
{
unsigned char a = 1;
a <<= 1;
printf("a = %d\n", (int) a);
return 0;
}
на L , будет напечатано 2, но что произойдет на B ? Будет ли это сдвигать 1 и напечатайте 0?.
РЕШЕНИЕ: Определение C99 в 6.5.7 гласит, что, по крайней мере, на
беззнаковые целочисленные типы, <<
и >>
умножаются и делятся на 2
соответственно.
Проблема 2:
Мы пишем следующий код, который мы хотим сделать переносимым:
Программа READ:
/* program READ */
#include <stdio.h>
int main()
{
FILE* fp;
unsigned char a;
fp = fopen("data.dat", "rb");
fread(&a, 1, 1, fp);
fclose(fp);
return 0;
}
и программа WRITE:
/* program WRITE */
#include <stdio.h>
int main()
{
FILE* fp;
unsigned char a = 1;
fp = fopen("data.dat", "wb");
fwrite(&a, 1, 1, fp);
fclose(fp);
return 0;
}
что произойдет, если мы запустим WRITE на L , переместите файл данных в B и запустить ПРОЧИТАТЬ там? И если мы запустим ЗАПИСЬ на B , а затем ПРОЧИТАЕМ на L ?
Извините, если это FAQ. Я безуспешно гуглил часами.