хранение целочисленного значения в обратном порядке

0

при печати шестнадцатеричного значения (значение, которое сохраняется в a), печатается в обратном порядке,

int main()
{
    int i;
    uint8_t b[4];
    int a = 0xaabbccdd;
    uint8_t *ptr;
    ptr = &b;
    memcpy(ptr,&a,4 * sizeof(uint8_t));

    for(i = 0;i < 4;i++)
    {
        printf("%x  ",*ptr++);
    }
    return(0);

}

вывод

dd  cc  bb  aa

как сохранить это в том же порядке, который я дал в качестве ввода (aabbccdd)

Теги:
pointers
memory
memcpy

1 ответ

2
Лучший ответ

Это связано с ENDIANNESS, как компьютеры хранят числовые значения в памяти.

Подводя итог, большинство современных процессоров (x86, x86-64, ARM) являются малорисковыми (теперь ARM является двунаправленным, вы можете настроить его на аппаратном уровне).

Это означает, что наименее значимые байты имеют самый низкий адрес (сначала маленький конец).

Вместо того, чтобы пытаться пойти против этого, я бы посоветовал вам обойти его, если вам действительно нужно.

Одна вещь, которую вы могли бы сделать, если вам действительно нужно, - использовать сетевой порядок байтов, который определяется как big-endian. htons(), htonl(), ntohs(), ntohl() могут быть функции, такие как htons(), htonl(), ntohs(), ntohl().

  • 0
    спасибо, работает htonl ()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню