Как объединить четыре шестнадцатеричные цифры в 3 шестнадцатеричные цифры в C # - PullRequest
1 голос
/ 12 октября 2010

рассмотрите следующий код:

string x="3F"; //0011 1111
string y="3F"; //0011 1111
string result="FFF";

, где x равен 6 битам, а y равен 6 битам, но каждый из них происходит из разных мест, и объединение их в 3 шестнадцатеричных числа является необходимой операцией ... как это сделать в C #. примечание: максимальное значение x, y равно 3F, поэтому переполнения не будет.

Также мне нужна обратная операция:

string i="bc8"; //1011 1100 1000
string o1="2F";//10 1111
string o2="08";//00 1000

как получить o1 и o2 от i.

спасибо,

Ответы [ 2 ]

6 голосов
/ 12 октября 2010

Это всего лишь две простые битовые операции. Вы должны сдвинуть (<<) биты на шесть позиций влево и затем или (|) их с шестью младшими битами.

uint x = 0x3f
uint y = 0x3f
uint result = x << 6 | y;

Для разложения замаскируйте нижние и сдвиньте верхние шесть бит, чтобы разделить их.

uint orig = 0xbc8;
uint x = orig >> 6;
uint y = orig & 0x3f;

Преобразования в строку и из строки оставляются в качестве дополнительного упражнения; -)

2 голосов
/ 12 октября 2010

Я бы сказал, преобразуйте строковое представление в целое число.
Затем используйте shift для построения нового значения int из 2 целых чисел.
И затем снова введите в строку.

string str1 = "3F";
string str2 = "3F";

int n1 = int.Parse(str1, NumberStyles.HexNumber);
int n2 = int.Parse(str2, NumberStyles.HexNumber);

int number = (n1 << 6) | n2;
return number.TosString("X");

Обратное следуетсделать аналогичным образом:

string str = "FFF";
int number = int.Parse(str, NumberStyles.HexNumber);
int n1 = number & 0x3F;
int n2 = number >> 6;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...