Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Do 25.07.13 23:38 
Ich möchte eingaben binär angezeigt bekommen.
Das habe ich mit folgendem Code hin bekommen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
for (int i = 0; i < textBox.TextLength; i++)
{
    string text = textBox.Text.Substring(i, 1);
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    byte[] bytewertarray = enc.GetBytes(text);
    string bitstring = Convert.ToString(bytewertarray[0], 2).PadLeft(8'0');
    textBox_bit.AppendText(bitstring);
}

ich durchlaufe also alle eingegebenen zeichen, wobei jedes erst in ASCII und dann weiter zu binär umgewandelt und danach wieder ausgegeben wird.

doch es geht sicher eleganter, einfacher oder nicht? wenn ja wie?

Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 26.07.13 05:47 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: avoid
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Fr 26.07.13 13:14 
wie ich sehe verwendest du ".ToCharArray()" das spart dir das Encoding zu ASCII und .GetBytes().
um zwei schritte vereinfacht, nice, danke. :)

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 26.07.13 13:30 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 26.07.13 13:47 
Zitat:
wie ich sehe verwendest du ".ToCharArray()" das spart dir das Encoding zu ASCII und .GetBytes().


Dafür bekommst du jetzt als Ergebnis ja auch eine utf16 Lösung und keine ASCII. Probier mal z.B. das € Zeichen und vergleiche beide Methoden.
Falls ASCII Encoding relevant ist mußt du auch explizt so encoden bzw. explizit knallen wenn der Input nicht in ASCII darstellbar ist.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 26.07.13 14:14 
Hallo zusammen,

aber warum erst ein char-Array erzeugen?
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (char c in s)
{
  ...
}

Ein char ist ein char, egal ob in einem string oder einem char[].

P.S. Auch das PadLeft(8, ...) macht mich stutzig, denn ein char ist intern ein 16bit-Wert.
Bei Convert.ToString(c, 2) findet nämlich eine Promotion auf int statt, und es wird die Methode Convert.ToString(int value, int toBase) aufgerufen (schaut mal die Ausgabe bei den "Examples" an).


Zuletzt bearbeitet von Th69 am Fr 26.07.13 14:24, insgesamt 1-mal bearbeitet
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Fr 26.07.13 15:29 
@Ralf Jansen,
UTF16 hab ich im Encoding nicht drin aber mit utf32 kommt das selbe Resultat wie bei ASCII raus.
dann sehe ich das "a" 01100001 ist, also die 97 in der ASCII-Tabelle.

ob es relevant ist kann ich dir gar nicht beantworten.
aber es sollen auch so dinge wie Leertaste und alle anderen Sonderzeichen verarbeitet werden.
selbst Enter (CR LF) macht es so aktuell, was ich recht nett finde.

@Th69,
du hast mit dem char schon recht.
wenn ich aber diese Zeile verwende muss ich ein Array benutzen wegen der Syntax.
ausblenden C#-Quelltext
1:
byte[] bytewert = enc.GetBytes(text);					

das hat Frühlingsrolle ja nur von mir übernommen.

die Sache mit .PadLeft(8, ...) ist schon richtig so denke ich.
die Bits fangen ja von rechts an weswegen mich die linken 8 nicht kümmern.
ich gehe von einer normalen ASCII-Tabelle mit den werten 000 bis 255 aus.
sollte ich auch mal die anderen verwenden kann ich die 8 ja auf 16 aufstocken.
und die ersten 8Bit sind ja schließlich die einzig wahren. ;)

das mit der Promotion auf int verstehe ich aber nicht. :(

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 26.07.13 15:40 
Zitat:
das mit der Promotion auf int verstehe ich aber nicht. :(


Du hast einen char und die Convert.ToString() Methode die du aufruft hat keine Überladung mit char. Die die am nächsten dran ist ist die mit int also wird der char nach int gecastet. Und der cast Operator char -> int wird dir die utf16 Repräsentation als int liefern. Für die üblichen Zeichen(in deutsch und englisch) ist das Bytemuster in den verschiedenen Encodings oft gleich aber eben nicht alle. Darum mein Hinweis auf das "€" Zeichen als Beispiel.

Wenn du sagst du möchtest die binär Darstellung eines char dann must du sagen in welchem Encoding. Ein char hat keinen eindeutige binär Representation. Ein char ist ein char ist ein char (user profile iconTh69 siehste da kann ich drüber ;)) und kein Byte oder Bytefolge.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 27.07.13 22:21 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 28.07.13 09:13 
Hallo,

du weißt aber schon, wofür '00111111' im ASCII-Code steht, oder? (Tipp: dies entspricht decimal 63)
Und daher ist ASCIIEncoding nur bedingt einsetzbar (und außerdem kann man sich auch die Schleife über das byte-Array sparen, denn ASCII codiert immer nur genau 1 Byte)...

@avoid, @Frühlingsrolle: lest euch daher mal unter ASCIIEncoding den Abschnitt 'Remarks' genau durch.

P.S: @Ralf, das mit dem "char ist ein char ist ein char" wollte ich sogar erst schreiben, dachte mir aber, das versteht dann keiner :lol:
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 28.07.13 15:08 
Th69, sprichst du auf diesen abschnitt an?
Zitat:
Beim Codieren werden Unicode-Zeichen in eine Bytefolge transformiert. Beim Decodieren wird eine Folge codierter Bytes in Unicode-Zeichen transformiert.

ASCIIEncoding entspricht der Windows-Codepage 20127. Da ASCII eine 7-Bit-Codierung ist, sind ASCII-Zeichen auf die niedrigsten 128 Unicode-Zeichen beschränkt, von U+0000 bis U+007F. Wenn Sie den von der Encoding.ASCII-Eigenschaft oder dem ASCIIEncoding-Konstruktor zurückgegebenen Standardencoder verwenden, werden Zeichen außerhalb dieses Bereichs durch ein Fragezeichen (?) ersetzt, bevor der Codierungsvorgang ausgeführt wird. Da die ASCIIEncoding-Klasse nur einen beschränkten Zeichensatz unterstützt, sind die Klassen UTF8Encoding, UnicodeEncoding und UTF32Encoding für globalisierte Anwendungen besser geeignet. Die folgenden Überlegungen unterstützen Sie bei der Entscheidung, ob ASCIIEncoding verwendet werden soll:

falls ja, warum sagst du das nicht einfach so: "bei ASCIIEncoding werden nur die ersten Zeichen mit 7 Bit (0-127) verwendet, alle Zeichen die darüber liegen werden durch ein ? ersetzt und können nicht verarbeitet werden".

so verstehe ich es auch. ;)

dem nach kann ich alle gängigen Zeichen der deutschen Sprache verwenden ausgenommen § und ´ womit ich kein Problem habe.
ich tüftele ja nur an einem kleinen Rätzel spiel.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 28.07.13 15:57 
Zitat:
dem nach kann ich alle gängigen Zeichen der deutschen Sprache verwenden ausgenommen § und ´ womit ich kein Problem habe.


ä,ö,ü,ß,€ sind natürlich völlig unüblich in Deutsch ;)
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 28.07.13 17:00 
stimmt, die liegen ja auch dahinter.
hab ich vor lauter merkwürdigen schnörkeln gar nicht in der Tabelle bemerkt.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 28.07.13 23:01 
- Nachträglich durch die Entwickler-Ecke gelöscht -