Laden...

[erledigt]Invertieren von Items innerhalb einer Liste

Erstellt von pheanX vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.335 Views
P
pheanX Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren
[erledigt]Invertieren von Items innerhalb einer Liste

Hallo zusammen,

ich hoffe ich habe den richtigen Teil des Forums gewählt, falls nicht hoffe ich das man mir das als neuer User nachsehen kann. Nun zu meinem Problem bzw. meiner Frage:

Ich habe als Input einen 4 Byte Datensatz ( 814CEEA7 ) den ich nun zu ( 7AEEC418 ) konvertieren möchte. Mein Code hierzu sieht wie folgt aus


                string output = recieved_data.Reverse();
                int charCount = 2;
                string result;

                List<string> parts = new List<string>();

                for (int i = 0; i < Math.Ceiling((double)output.Length / charCount); i++)
                {
                    parts.Add(output.Substring(i * charCount, Math.Min(charCount, output.Length - (i * charCount))));

                }

                parts.Reverse();

                result = string.Join(" ", parts.ToArray());
                result = result.Replace(" ", "");
                lbTag.Text = result;

Mein result ist in diesem Fall = A7EE4C81

recieved_data ist mein Input also 814CEEA7 nun stehe ich vor dem Problem das ich nicht weiß wie ich die Items innerhalb meiner Liste erneut spiegeln kann - zumindest funktioniert es so nicht. Ich hoffe das jemand eine Idee dazu hat und freue mich schon auf eure Ansätze.

P.S. Bevor ich es vergesse, meine StringExtension für den Reverse:


    public static class StringExtension
    {
        public static string Reverse(this string s)
        {

            char[] c = s.ToCharArray();
            Array.Reverse(c);
            return new string(c);
        }

    }
301 Beiträge seit 2009
vor 8 Jahren

Willst du das zu Übungszwecken implementieren?

Es gibt ne Linq Extension "Reverse"

var meineBytes = new byte[15];
            var reversedBytes = meineBytes.Reverse();

EDIT : Jetzt erst gesehen, dass du die ja bereits nutzt.

125 Beiträge seit 2008
vor 8 Jahren

Wo genau liegt denn dein Problem? Willst du die Einträge in der Liste wieder umkehren?

parts.Add(output.Substring(i * charCount, Math.Min(charCount, output.Length - (i * charCount))).Reverse());

Wenn die Liste schon befüllt ist, dann mit einer Extenstion Methode für List<string>

5.299 Beiträge seit 2008
vor 8 Jahren

Ich habe als Input einen 4 Byte Datensatz ( 814CEEA7 ) den ich nun zu ( 7AEEC418 ) konvertieren möchte. Diese Konvertierung ist aber keine Invertierung der Byte-Reihenfolge, sondern was ganz komisches.

Also wenn du "814CEEA7" nach "7AEEC418" konvertierst, dann wäre das eine Inversion der Chars innerhalb des Strings, aber du sprichst ja von Bytes, also wenn du ein Byte-Array umdrehen willst, dann drehe das Byte-Array um, nicht einen String, den du evtl. daraus gebastelt hast.

Der frühe Apfel fängt den Wurm.

16.842 Beiträge seit 2008
vor 8 Jahren

Kann das sein, dass Du Daten zwischen einem BigEndian-System und eine LittleEndian-System austauschst?
Byte-Reihenfolge

Wenn ja dann gibt es bessere Wege und .NET das zu kompensieren (BitConverter / IPAddress.NetworkToHostOrder).

P
pheanX Themenstarter:in
27 Beiträge seit 2015
vor 8 Jahren

Ich danke vielmals für die Ansätz - habs auch hinbekommen 😉 Vielen Dank das Ergebnis schieb ich nach für die Dokumentation von meinem Anfängerfehler 😃

Nochmals danke