Frage

Dies wird 1 Hex-Zeichen auf seinen ganzzahligen Wert umwandeln, aber benötigt eine (Teil-) Zeichenkette zu konstruieren.

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

Hat .NET eine integrierte Möglichkeit, ein einzelnes Hex-Zeichen in seinen Byte zu konvertieren (oder int, spielt keine Rolle) Wert, beinhaltet nicht eine neue Zeichenfolge zu erstellen?

War es hilfreich?

Lösung

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

oder sogar schneller (Subtraktion vs. Array Suche), aber keine Überprüfung für schlechten Eingang:

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');
}

Andere Tipps

Korrigieren Sie mich, wenn im falschen, aber können Sie einfach

Convert.ToByte(stringValue, 16);

, solange der String eine Hex-Zahl repräsentiert? Ist das nicht der Punkt der Basis Paramter?

Strings sind unveränderlich, ich denke nicht, es ist ein Weg den Teil Byte-Wert des char bei Index 0, ohne eine neue Zeichenfolge

zu bekommen

Sicher, dass Sie den Hex-Wert, ohne jemals zu benötigen bekommen kann eine andere Zeichenfolge zu erstellen. Ich bin mir nicht sicher, was es wirklich Sie gewinnen werde, Leistung klug, aber da Sie gefragt, hier ist was Sie angefordert haben.

    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;
            }
        }
    }

Wenn Sie wissen, der Hex-Wert ist nur ein Byte wandeln dann nur zu einem Int32 und werfen dann

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

Billigere könnte sein:

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

Dies wird nur die interessante char char hinzufügen [] und nicht die gesamte Zeichenfolge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top