Konvertieren ein einzelnes Hex-Zeichen auf seinen Byte-Wert in C #
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?
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 bekommenSicher, 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.