Как процитировал Code Monkey, это определяется реализацией, а реализация варьируется - это не просто разница между BigEndian / LittleEndian и charset.Я протестировал четыре реализации (все с использованием ASCII) с программой
#include <stdio.h>
int main()
{
unsigned value = 'ABCD';
char* ptr = (char*)&value;
printf("'ABCD' = %02x%02x%02x%02x = %08x\n", ptr[0], ptr[1], ptr[2], ptr[3], value);
value = 'ABC';
printf("'ABC' = %02x%02x%02x%02x = %08x\n", ptr[0], ptr[1], ptr[2], ptr[3], value);
return 0;
}
и получил четыре разных результата
Big endian (AIX, POWER, IBM compiler)
'ABCD' = 41424344 = 41424344
'ABC' = 00414243 = 00414243
Big endian (Solaris, Sparc, компилятор SUN)
'ABCD' = 44434241 = 44434241
'ABC' = 00434241 = 00434241
Little endian (Linux, x86_64, gcc)
'ABCD' = 44434241 = 41424344
'ABC' = 43424100 = 00414243
Little endian (Solaris, x86_64, компилятор Sun)
'ABCD' = 41424344 = 44434241
'ABC' = 41424300 = 00434241