Entwickler-Ecke

Basistechnologien - von String in Byte umwandeln


tomycat - Di 12.03.19 10:04
Titel: von String in Byte umwandeln
hallo,
ich habe eine String z.b.
string a = "51 51 51 5A";

Ich bin soweit gekommen, dass ich per forschleife den String auseinandergenommen habe.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
string_menge[0// <--- 0x51
...
string_menge[3// <--- 0x5A

//soweit so gut.

data = new Byte[256];
data[0] = <--- wie komme ich string_menge[0] hier rein?



Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Di 12.03.2019 um 09:55


Delete - Di 12.03.19 10:17

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Di 12.03.19 11:00

s.a. Hexwerte im String in "echte" Hexwerte umwandeln [https://www.entwickler-ecke.de/viewtopic.php?t=84988]


tomycat - Di 12.03.19 20:58


C#-Quelltext
1:
2:
 Byte[] sende_data = new Byte[100];
 sende_data[0] = Convert.ToByte("0x51"); //crash Falsches Format


Ralf Jansen - Di 12.03.19 21:16


C#-Quelltext
1:
Convert.ToByte("0x51"16// crasht nicht, wir können aber nur raten das es das ist was du willst                    


tomycat - Di 12.03.19 21:36

jein :-)
Ich zerschneide einen String "51 51 51 4e" und jedes Byte soll ich in Arry Byte rein.


jfheins - Di 12.03.19 22:55

Dann solltest du erst mal bedenken, dass du mit string_menge[0// <--- 0x51 keineswegs ein Byte bekommst.

Du bekommst ein 'char', welcher 16bit lang ist und einen UTF-16 code point repräsentiert. Um aus einem String eine Menge von Bytes zu bekommen, brauchst du eine Übersetzungstabelle. Früher gab es codepages, heute nimmt man Unicode Encodings.

Ich empfehle dir diese Methode: Encoding.GetBytes(string) [https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.getbytes?view=netframework-4.7.2#System_Text_Encoding_GetBytes_System_String_]

Moderiert von user profile iconTh69: URL-Titel hinzugefügt


Delete - Di 12.03.19 23:02

- Nachträglich durch die Entwickler-Ecke gelöscht -


Th69 - Mi 13.03.19 10:43

@jfheins: string_menge ist ein string[] (also ein String-Array), das geht zwar nicht aus dem Source-Code direkt hervor, aber aus der Beschreibung (einfacher geht es selbstverständlich mittels String.Split(' ')!).
Auch dein Link paßt nicht zu der Frage, denn dieser würde zeichenweise umwandeln (Binärrepräsentation), anstatt die Hex-Strings umzuwandeln.

Der Code von @Frühlingsrolle ist korrekt, aber dies stand ja auch schon in den von mir geposteten Link drin ("HexToBytes"), wenn auch mittels byte.Parse(), anstatt Convert.ToByte(s, 16).


tomycat - Mi 13.03.19 11:34

vielen Dank an Alle, einfach Super Forum :-)



C#-Quelltext
1:
Convert.ToByte(s, 16// <--- genau das habe ich gesucht und habe mir dir Zähne ausgebissen.