Let L and B be two machines. L order its bits from LSB (Least Significant Bit) to MSB (Most Significant Bit) while B order from MSB to LSB. Or, in other words, L uses Little Endian while B uses Big Endian bit - not to be confused with byte - ordering.
Problem 1 SOLVED:
We are writing the following code which we want to be portable:
#include <stdio.h>
int main()
{
unsigned char a = 1;
a <<= 1;
printf("a = %d\n", (int) a);
return 0;
}
on L, it will print 2, but what happens on B? Will it shift the 1 out and print 0?.
SOLUTION: The C99 definition at 6.5.7 says it that, at least on
unsigned integer types, <<
and >>
will multiply and divide by 2
respectively.
Problem 2:
We are writing the following code which we want to be portable:
READ program:
/* 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;
}
and WRITE program:
/* 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;
}
what happens if we run WRITE on L, move the data file to B and run READ there? And if we run WRITE on B and then READ on L?
Sorry if this is a FAQ. I googled for hours without luck.