получает msb и lsb с использованием одной и той же переносимой маски относительно порядка байтов? - PullRequest
1 голос
/ 21 июня 2020

Предполагая, что следующий код C работает на 32-битной платформе (т.е. sizeof (int) = 4), переносится ли следующий код между прямым порядком байтов и прямым порядком байтов? Когда я спрашиваю «переносимо ли это», я имею в виду, будет ли приложение печатать:

a) на платформе с прямым порядком байтов

Address is 0xAABBCCDD
MSB is AA
LSB is DD
little endian

б) на платформе с прямым порядком байтов

Address is 0xAABBCCDD
MSB is AA
LSB is DD
big endian

?

#include <stdio.h>

typedef unsigned char uint8;
typedef unsigned int uint32;

#define is_bigendian() ( (*(uint8*)&var) == 0 )

int main()
{
    uint32 var = 1;
    uint8 msb;
    uint8 lsb;
    printf("Address is %x\n", (uint32)&var);
    msb = (((uint32)&var) & 0xFF000000) >> 24;
    lsb = (((uint32)&var) & 0x000000FF) >> 0;
    printf("MSB is %x\n", msb);
    printf("LSB is %x\n", lsb);
    if (is_bigendian())
    {
        printf("big endian\n");
    }
    else
    {
        printf("little endian\n");
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...