Convertit un caractère hexadécimal unique en valeur d’octet en C #

Ceci convertira 1 caractère hexadécimal en valeur entière, mais doit construire une (sous) chaîne.

Convert.ToInt32(serializedSsortingng.Subssortingng(0,1), 16); 

Est-ce que .NET a un moyen intégré de convertir un seul caractère hexadécimal en valeur byte (ou int, peu importe) qui n’implique pas la création d’une nouvelle chaîne?

 int value = "0123456789ABCDEF".IndexOf(char.ToUpper(sourceSsortingng[index])); 

Ou encore plus rapidement (soustraction vs recherche dans un tableau), mais pas de recherche de mauvaise entrée:

 int HexToInt(char hexChar) { hexChar = char.ToUpper(hexChar); // may not be necessary return (int)hexChar < (int)'A' ? ((int)hexChar - (int)'0') : 10 + ((int)hexChar - (int)'A'); } 

Corrigez-moi si je me trompe, mais pouvez-vous simplement utiliser

 Convert.ToByte(ssortingngValue, 16); 

tant que ssortingngValue représente un nombre hexadécimal? N’est-ce pas le point du paramètre de base?

Les chaînes sont immuables, je ne pense pas qu’il y ait un moyen d’obtenir la valeur d’octet de sous-chaîne du caractère à l’index 0 sans créer une nouvelle chaîne

Bien sûr, vous pouvez obtenir la valeur hexadécimale sans jamais avoir besoin de créer une autre chaîne. Je ne suis pas sûr de ce que cela va réellement vous apporter, en termes de performances, mais puisque vous avez demandé, voici ce que vous avez demandé.

  public int FromHex(ref ssortingng hexcode, int index) { char c = hexcode[index]; switch (c) { case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'A': case 'a': return 0xa; case 'B': case 'b': return 0xb; case 'C': case 'c': return 0xc; case 'D': case 'd': return 0xd; case 'E': case 'e': return 0xe; case 'F': case 'f': return 0xf; case '0': default: return 0; } } } 

Si vous connaissez la valeur hexadécimale n’est qu’un octet, convertissez-la simplement en Int32 puis convertissez

 var b = (byte)(Convert.ToInt32(serializedSsortingng, 16)); 
 Encoding.UTF8.GetBytes( serializedSsortingng.ToCharArray(), 0, 1) 

Moins cher pourrait être:

 Encoding.UTF8.GetBytes( new char[]{ serializedSsortingng[0] }, 0, 1) 

Cela ne fera qu’append le caractère intéressant au caractère [] et non la chaîne entière.