Как объединить 2 разных без знака int в C - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь объединить два беззнаковых целых, которые у меня есть в массиве.Это выглядит как

hex[0] == 0x0A;
hex[1] == 0x2C;

Мне нужно объединить эти два шестнадцатеричных числа в одно, поэтому результат должен быть 0x2AC.

Я имею в виду, что в двоичном виде это выглядит как 01010 и 101100, поэтому результат 1010101100.

Я думаю, что я должен использовать побитовые операторы, чтобы сделать это, но я понятия не имею, как.Спасибо.

1 Ответ

0 голосов
/ 03 марта 2019

Не уверен, что точно понимаю, что вы хотите, но я предполагаю, что у вас есть два знака без знака, a и b, значение которых

a=0xUV;  
b=0xWY;

, где U, V, W и Y - 4 битаклев, которые формируют эти значения.И кажется, что вы хотите без знака короткой формы из клев UWVY.Так что в вашем случае U == 0, V == A, W == 2 и Y == C

Это можно сделать с помощью маскировки и сдвига.Маскирование с помощью 0x0f извлекает нижний кусок, а маскирование с помощью 0xf0 - верхний.И достаточно сместить их в правильное положение в конечном результате.

Это можно сделать с помощью следующего кода C

unsigned char a=0x0A;
unsigned char b=0x2C;
unsigned short result=  (a&0xf0)<<8) // gives 0x0000
                      | (a&0x0f)<<4) // gives 0x00A0
                      | (b&0xf0)<<4) // gives 0x0200
                      | (b&0x0f);    // gives 0x000C
...