2010-10-12 2 views
1

рассмотрим следующий код:как объединить четыре гекса цифры на 3 гекса цифры в C#

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

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

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

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

как получить O1 и O2 от I.

спасибо,

ответ

6

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

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

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

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

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

2

Я бы сказал, преобразование строкового представления в целое.
Затем используйте shifting для создания нового значения 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"); 

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

string str = "FFF"; 
int number = int.Parse(str, NumberStyles.HexNumber); 
int n1 = number & 0x3F; 
int n2 = number >> 6; 
Смежные вопросы