Question

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

Convert.ToInt32(serializedString.Substring(0,1), 16);

Est-ce que .NET a un moyen intégré pour convertir un caractère hexadécimal unique en son octet (ou int, peu importe) la valeur qui ne nécessite pas de créer une nouvelle chaîne?

Était-ce utile?

La solution

int value = "0123456789ABCDEF".IndexOf(char.ToUpper(sourceString[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');
}

Autres conseils

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

Convert.ToByte(stringValue, 16);

aussi longtemps que stringValue représente un nombre hexadécimal? N'est-ce pas le point du paramètre de base?

Les chaînes de caractères sont immuables, je ne pense pas qu'il existe 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 avoir besoin de créer une autre chaîne. Je ne sais pas trop ce que vous gagnerez en termes de performances, mais puisque vous avez demandé, voici ce que vous avez demandé.

    public int FromHex(ref string 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 lancez-la

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

Moins cher pourrait être:

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

Ceci n’ajoutera que le caractère intéressant au caractère [] et non la chaîne entière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top