2010-10-12 6 views
1

considèrent le code suivant:comment fusionner quatre chiffres hexadécimaux en 3 chiffres hexadécimaux en C#

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

où x est 6 bits et y est 6 bits mais chacun provient de différents lieu et en les fusionnant dans 3 hex -decimal chiffres est l'opération requise ... comment faire cela en C#. remarque: la valeur x, y max est 3F, donc aucun débordement ne se produira.

aussi i besoin l'opération inverse:

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

comment obtenir et o2 de o1 i.

merci,

Répondre

6

Il est juste deux simples opérations de bits. Vous devez décaler (<<) les bits par six positions vers la gauche et les ou (|) eux avec les six bits inférieurs.

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

Pour décomposer, masquer plus bas et décaler les six bits supérieurs pour les séparer.

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

Les conversions en provenance et à chaîne sont laissés comme un exercice supplémentaire ;-)

2

Je dirais convertir la représentation de chaîne en nombre entier.
Ensuite, utilisez shifting pour construire la nouvelle valeur int à partir des 2 entiers.
Ensuite, enchaînez à nouveau.

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"); 

inverse doit être effectué de manière similaire:

string str = "FFF"; 
int number = int.Parse(str, NumberStyles.HexNumber); 
int n1 = number & 0x3F; 
int n2 = number >> 6; 
Questions connexes