PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C#] HEX werte als String in HEX-Werte Wandeln


DraconiX
2013-01-07, 08:02:18
So... für mein kleines Programm suche ich ein snippet um Hex Werte die als String ausgegeben werden wieder als Hex Werte in ein Array bekomme... hört sich gerade dusselig an, aber ich sehe den Wald vor Bäumen nicht mehr :freak:

Um die Hexwerte in ein String zu bekommen gehe ich wie folgt vor, kein Thema, nur brauche ich das halt andersrum:


byte[] vals = { 0x01, 0xAA, 0xB1, 0xDC, 0x10, 0xDD };

string str = BitConverter.ToString(vals);
Console.WriteLine(str);

/*Output:
01-AA-B1-DC-10-DD
*/

TheGamer
2013-01-07, 09:09:39
Einer von zig Wegen. Hier mal was mit Linq.


public static byte[] StringToByteArray(string hex)
{
return hex.Split(new char[] { '-' }).Select(x => Convert.ToByte(x, 16)).ToArray();
}

Auf Deutsch gesagt. Den String einfach auftrennen nach Bindestrich und jedes Element (2 Stelliger String) in ein Byte konvertieren. Wichtig dabei die Angabe das die Basis 16 ist.

PS: Nicht auf Performance geprueft/nachgedacht

-Saphrex-
2013-01-07, 09:14:34
Wieso verwendest du nicht das vorhandene Array? Oder manipulierst du den String?

Wie wäre es damit?

public static byte[] StrToByteArray(string str)
{
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
}

TheGamer
2013-01-07, 09:29:23
Wieso verwendest du nicht das vorhandene Array? Oder manipulierst du den String?

Wie wäre es damit?

public static byte[] StrToByteArray(string str)
{
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
return encoding.GetBytes(str);
}


Du musst lesen. Sowas will er nicht.

Er will aus seinem Output (ein Bindestrich seperated string) ein Byte Array machen. Dein Code liefert auch ein Byte Array aber fuer jedes Zeichen im String.

Dein Code liefert

0 = 0x30
1 =0x31
- = 0x2d
A = 0x41
A = 0x41
- = 0x2d
usw.

Er will aber

01 = 0x01
AA = 0xAA
B1 = 0xB1
DC = 0xDC
10 = 0x10
DD = 0xDD

-Saphrex-
2013-01-07, 13:27:36
Achso, hab das mit dem Bindestrich überlesen. Da ist dann natürlich Split am sinnvollsten.

DraconiX
2013-01-07, 14:09:13
Ja danke ihr beiden... der Snippet von TheGamer hat wunderbar funktioniert :)

War / Ist für eine Mac-Eingabemaske, welche natürlich die Mac-Adresse in String übernimmt aber für das MagicPacket als Hex vorliegen muss...