Преобразование подмассива char в целое число - PullRequest
2 голосов
/ 06 августа 2020
unsigned int b;
unsigned char a[] = 
{0x00,0x00,0x00,0x12,0x00,0x00,0x81,0x03,0x00,0x00,0x00,0x00,0x01,0x91,0x01,0x01,0xb1,0x04,0x47,0x86,0x8f,0xf8,0x00};

Я новичок ie в C программировании,

Мне нужно взять начало подмассива из 4 байтов с [18], что составляет 0x47868ff8,

и преобразовать его в соответствующее десятичное целое число: 1200001016.

Я пытаюсь использовать memcpy(&b,a+18, 4), но похоже, что это не работает,

Может ли кто-нибудь дать мне несколько советов по работе с этой функцией?

И если я хочу прочитать сообщение указателя char, затем преобразовать его по 4 байта в целочисленный массив,

как лучше всего это сделать? Спасибо.

1 Ответ

1 голос
/ 06 августа 2020

Подобное копирование имеет поведение, определяемое реализацией, и вы получите разные результаты в зависимости от порядка байтов ЦП.

Чтобы сделать это переносимо, вы можете использовать побитовые операции.

b = (unsigned int)a[18] << 24 | (unsigned int)a[19] << 16 | (unsigned int)a[20] << 8 | a[21];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...