Autor Beitrag
noiiZeee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 07.04.21 16:51 
Hallo liebe Community!
Zu meinem Problem:
Ich schreibe gerade einen Code, der die Buchstaben eines Textes mittels einer for-Schleife in Bytes umwandelt, damit ich dann später diese in Bits umwandeln kann. Wenn ich nun mit foreach in der for-Schleife die Bytes ausgeben lasse funktioniert auch alles. Nun möchte ich die foreach-Schleife aber ausserhalb der for-Schleife haben, damit ich mit Methoden arbeiten kann (einmal umwandeln und einmal ausgeben). Setzte ich diese ausserhalb der for-Schleife gibt die foreach mir nur den letzten Buchstaben als Byte aus was mir auch klar ist, da die for-Schleife erst durchläuft, bevor das Programm weiter macht. Wie kann ich aber meine Bytes nun zwischenspeichern, damit die foreach-Schleife mit den Daten auch ausserhalb arbeiten kann?
Hier mein Code:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
static void Main(string[] args)
        {
            string Text = "TEXT";
            byte[] byteText = null;

            for (int i = 0; i < Text.Length; i++)
            {
                byteText = new byte[] { Convert.ToByte(Text[i]) };
            }

            foreach (Object obj in byteText)
            {
                Console.WriteLine(obj); //Gibt nur letzten Buchstaben der for-Schleife als Byte aus
            }
        }


Für schnelle und Hilfreiche antworten wäre ich dankbar, da ich schon seit Stunden nach einer Lösung suche.

LG
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 07.04.21 17:09 
Das byteText Array erzeugt du in der Schleife jedes mal neu. Bei jedem Durchlauf ersetzt du also das Array mit einem anderen Array und alles von vorher ist weg.
Das Array mußt du vor der Schleife erzeugen und die konvertierten Bytes immer an die richtige Stelle ins Array schreiben.
In byteText stecken byte(s). Im foreach solltest du dann auch byte benutzen und nicht Object.

Alternative:

Ein Char in deinem String Text ist nicht äquivalent zu einem oder mehreren Bytes. Es gibt verschiedene Encodings die es zu berücksichtigen gilt. ASCII ist was anderes als Unicode und wiederum was anderes als alle möglichen anderen Varianten von Encodings.

Um deinen string in Bytes zu verwandeln kannst du einfach die entsprechenden Methoden der Encoding Klasse verwenden. Z.B.
ausblenden C#-Quelltext
1:
var byteText = Encoding.ASCII.GetBytes(Text);					


Zum rückwandeln einfach
ausblenden C#-Quelltext
1:
var text = System.Text.Encoding.ASCII.GetString(byteText)					

Für diesen Beitrag haben gedankt: noiiZeee
noiiZeee Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: Mi 07.04.21 18:38 
Dankesehr! Hast mir weitergeholfen :)