
Envoyé par
aure298
je voudrais que la valeur récupérée soit considérée comme une valeur hexadécimale et non comme un entier ou une string.
"une valeur hexadécimale", ça n'a pas de sens... l'hexadécimal est juste une représentation du nombre. Peut importe qu'il soit représenté en décimal, en binaire, en octal ou en hexadécimal, c'est toujours un nombre. Au final, sa représentation interne est toujours binaire...
Si tu veux obtenir ou modifier la valeur d'un bit en particulier, tu peux utiliser les opérateurs | (ou binaire), & (et binaire), et ~ (non binaire).
Donc, en résumé : si tu as une chaine "303B" qui représente ton nombre, tu le parses pour obtenir un int :
int valeur = Convert.ToInt32("303B", 16);
Comme tu l'avais déjà vu, ça te donne un entier qui vaut 12347 en décimal (et qui vaut toujours 0x303B en hexa...)
Pour récupérer le bit de poids faible, tu fais ça :
int bitPoidsFaible = valeur & 1;
Ou d'une manière plus générale, pour récupérer le bit d'ordre n :
1 2 3 4 5 6
| bool GetBit(int number, int bitOrder)
{
int mask = 1 << bitOrder;
int result = number & mask;
return (result != 0);
} |
Et pour le modifier :
1 2 3 4 5 6 7 8 9 10 11 12
| void SetBit(ref int number, int bitOrder, bool bitValue)
{
int mask = 1 << bitOrder;
if (bitValue)
{
number = number | mask;
}
else
{
number = number & ~mask;
}
} |
Partager