Я пытаюсь понять порядок байтов памяти C, но я запутался.Я пробую мое приложение с некоторым значением на этом сайте для проверки вывода: www.yolinux.com / TUTORIALS / Endian-Byte-Order.html
Для 64-битного значения Iиспользовать в моей программе на C:
volatile long long ll = (long long)1099511892096;
__mingw_printf("\tlong long, %u Bytes, %u bits,\t%lld to %lli, %lli, 0x%016llX\n", sizeof(long long), sizeof(long long)*8, LLONG_MIN, LLONG_MAX , ll, ll);
void printBits(size_t const size, void const * const ptr)
{
unsigned char *b = (unsigned char*) ptr;
unsigned char byte;
int i, j;
printf("\t");
for (i=size-1;i>=0;i--)
{
for (j=7;j>=0;j--)
{
byte = b[i] & (1<<j);
byte >>= j;
printf("%u", byte);
}
printf(" ");
}
puts("");
}
Out
long long, 8 Bytes, 64 bits, -9223372036854775808 to 9223372036854775807, 1099511892096, 0x0000010000040880
80 08 04 00 00 01 00 00 (Little-Endian)
10000000 00001000 00000100 00000000 00000000 00000001 00000000 00000000
00 00 01 00 00 04 08 80 (Big-Endian)
00000000 00000000 00000001 00000000 00000000 00000100 00001000 10000000
Тесты
0x8008040000010000, 1000000000001000000001000000000000000000000000010000000000000000 // online website hex2bin conv.
1000000000001000000001000000000000000000000000010000000000000000 // my C app
0x8008040000010000, 1000010000001000000001000000000000000100000000010000000000000000 // yolinux.com
0x0000010000040880, 0000000000000000000000010000000000000000000001000000100010000000 //online website hex2bin conv., 1099511892096 ! OK
0000000000000000000000010000000000000000000001000000100010000000 // my C app, 1099511892096 ! OK
[Convert]::ToInt64("0000000000000000000000010000000000000000000001000000100010000000", 2) // using powershell for other verif., 1099511892096 ! OK
0x0000010000040880, 0000000000000000000000010000010000000000000001000000100010000100 // yolinux.com, 1116691761284 (from powershell bin conv.) ! BAD !
Проблема
Сайт yolinux.com анонсирует 0x0000010000040880 для BIG ENDIAN !Но мой компьютер использует LITTLE ENDIAN, я думаю (Intel proc.), И я получаю то же значение 0x0000010000040880 из моего приложения C и из другого конвертера hex2bin веб-сайта.__mingw_printf (... 0x% 016llX ..., ... ll) также печатает 0x0000010000040880, как вы можете видеть.
После сайта yolinux я перевернул мои "(Little-Endian)" и "(Big-Endian) "помечены в моем выводе на данный момент.
Кроме того, бит знака должен быть 0 для положительного числа, это дело моего результата, но также и результата yolinux. (Не может помочь мне быть уверенным.)
Если я правильно понимаю, что Endianness меняются только байты, а не биты, и мои группы битов, похоже, правильно инвертированы.
Это просто ошибка на yolinux.com или я пропускаю шаг по поводу64-битные числа и программирование на C?