C# Probleme beim umwandeln eines Byte-Strings in ein byte[]

Blue_Fox

Mitglied
Hi Leute

wie oben schon geschrieben, hab ich das Problem, dass ich einen Byte-String, erzeugt mit "BitConverter.ToString(temp) zu "A1-B2-C3" nicht mehr in das urspruengliche Bytearray zurueckwandeln kann!!

Egal was ich verwende, es kommen immer die Bytes des String raus.

Welche Funktionen kann ich da verwenden? Gibt es solche Funktionen?

mfg
Blue Fox
 

sheel

I love Asm
Hi

Unter der Voraussetzung, dass es eine gültige Eingabe im Format
hh-hh-hh... ist:

C#:
public byte[] funktion(String s)
{
    byte[] ret;
    int l = s.Length, i, c;
    if((l % 3) != 0)
        l++;
    l /= 3;
    ret = new byte[l];
    for(i = 0; i < l; i++)
    {
        c = s[3* i];
        c -= (c >= '0' && c <= '9') ? '0' : ((c >= 'a' && c <= 'h') ? ('a' - 10) : ('A' - 10));
        ret[i] = (byte)(c << 4);
        c = s[3* i + 1];
        c -= (c >= '0' && c <= '9') ? '0' : ((c >= 'a' && c <= 'h') ? ('a' - 10) : ('A' - 10));
        ret[i] = (byte)(ret[i] + c);
    }
    return ret;
}

Gruß
 
Zuletzt bearbeitet:

Blue_Fox

Mitglied
Hallo Sheel

Danke fuer das Programm****** Wird mir sehr weiterhelfen!

Aber allein haette ich es nicht hinbekommen....

Mfg

Blue Fox
 

Blue_Fox

Mitglied
Sorry aber irgendwie funktionierts doch nicht...

Wenn ich einen String "A1-B2-C3-D4" habe kommt mit deiner Funktion "0x01 0x12 0x23 0x34" raus

Edit: Bin draufgekommen warum. Wenn du in der Funktion ein 'a' oder ein 'A' liest, ziehst du 'a' oder 'A' wieder ab! Also kommt da immer 0 raus!

Ich habs jetzt auf 'W' anstatt 'a' und '7' anstatt 'A' geaendert und schon Funktioniert es!

Danke nochmal fuer deine Hilfe.

mfg
Bastian

PS: Shorthand Codes machen mich fertig!! ;)
 
Zuletzt bearbeitet:

sheel

I love Asm
So...
sorry für diesen unendlich dummen Fehler.

Problem hast du ja schon erkannt.
Habs oben auch ausgebessert, aber mit -10 statt anderen Zeichen.

Gruß
 

Shakie

Erfahrenes Mitglied
Alternativ einfach den String zwischen den Bindestrichen trennen und die Byte.Parse-Methode verwenden um aus dem hexadezimal formatierten String ein Byte zu gewinnen:
C#:
Byte[] originalByteData = new Byte[] { 10, 20, 30 };
String ByteArrayAsString = BitConverter.ToString(originalByteData);
Console.WriteLine(ByteArrayAsString);
String[] ByteArrayElementsAsString = ByteArrayAsString.Split(new String[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
Byte[] recoveredByteData = new Byte[ByteArrayElementsAsString.Length];
for (int i = 0; i < ByteArrayElementsAsString.Length; i++)
{
    recoveredByteData[i] = Byte.Parse(ByteArrayElementsAsString[i], System.Globalization.NumberStyles.HexNumber);
    Console.WriteLine(recoveredByteData[i]);
}
Consolenausgabe:
Code:
0A-14-1E
10
20
30