Niels Jakob: Binary to Text <=> Text to Binary Formel

Hallo,

gibt es eine Funktion mit der ich einzelne Zeichen in den dazugehörigen Binary Code umwandeln kann und umgekehrt?
So wie in dieser Tabelle:

http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp

Sprich: ich gebe "!" ein und bekomme "00100001" wieder - und umgekehrt.

(Ich hab echt ewig gesucht und nix wirklich hilfreiches gefunden :/)

Danke :-)

  1. Hi!

    gibt es eine Funktion mit der ich einzelne Zeichen in den dazugehörigen Binary Code umwandeln kann und umgekehrt?
    Sprich: ich gebe "!" ein und bekomme "00100001" wieder - und umgekehrt.

    (s)printf() mit %08b als Platzhalter erzeugt ein 8-stelliges Binärmuster eines als Zahl übergebenen Wertes. Aus einem Zeichen kannst du mit ord() dessen Zahlenwert ermitteln. Das geht so jedoch nur mit 1-Byte-Kodierungen. Von einem UTF-8-ä beispielsweise gibt ord() nur den Wert des ersten Bytes zurück.

    Für den umgekehrten Wert schau nach bindec(). In deren Umgebung schwirren auch noch weitere Funktionen zum Umwandeln rum.

    Lo!

    1. Diese verdammten Umlaute schon wieder! :P

      Ok, ich überlege es jetzt so zu machen:

      bin->text:
      chr(bindec("$binary")) - das klappt ja

      text->bin:
      ein Array mit genannter Tabelle machen.

      Ist zwar nicht so wirklich elegant aber immerhin müsste das doch funktionieren, oder? Fällt dir noch was besseres ein?

      Aber danke, dein Post war schon sehr hilfreich!

      1. Hi!

        Diese verdammten Umlaute schon wieder! :P

        Kommt ja auf die gewählte Zeichenkodierung an.

        chr(bindec("$binary")) - das klappt ja

        Wann immer du eine einzelne Variablen in Anführungszeichen einrahmst, machst du was verkehrt.

        text->bin:
        ein Array mit genannter Tabelle machen.
        Ist zwar nicht so wirklich elegant aber immerhin müsste das doch funktionieren, oder?

        Umständlich. Das geht doch automatisch mit ord() und sprintf().

        Fällt dir noch was besseres ein?

        Für welche Aufgabenstellung eigentlich?

        Lo!

        1. Wann immer du eine einzelne Variablen in Anführungszeichen einrahmst, machst du was verkehrt.

          idT :P

          text->bin:
          ein Array mit genannter Tabelle machen.
          Ist zwar nicht so wirklich elegant aber immerhin müsste das doch funktionieren, oder?

          Umständlich. Das geht doch automatisch mit ord() und sprintf().

          Naja, eben nicht, oder?

          sprintf("%08b",ord("ä"))

          gibt mir ja kein "ä" sondern "Ã"
          ..wenn ich hingegen ein array mache funzt es - ist aber halt umständlich.

          (Da ist auch nochmal die Aufgabenstellung - es soll halt eben auch mit Umlauten, Accents und allen Sonderzeichen funktionieren :-)

          1. Hi!

            Umständlich. Das geht doch automatisch mit ord() und sprintf().
            Naja, eben nicht, oder?
            sprintf("%08b",ord("ä"))
            gibt mir ja kein "ä" sondern "Ã"

            ord() liefert nur das erste Byte. Byteweiser Zugriff auf einen String geht wie beim Array-Zugriff. $foo[0] ergibt das erste Byte usw. Wenn du mit einer Schleife über den String gehst, ...

            ..wenn ich hingegen ein array mache funzt es - ist aber halt umständlich.

            Daraus kann ich nicht entnehmen, was du da konkret machst.

            (Da ist auch nochmal die Aufgabenstellung - es soll halt eben auch mit Umlauten, Accents und allen Sonderzeichen funktionieren :-)

            Nee, das ist der Versuch einer Problemlösung. Aber welches Problem hast du insgesamt? Geht es nur darum, alle Bytes einer Zeichenkette in binär darzustellen oder ist das auch nur der Versuch eine übergeordnete Aufgabe zu lösen, für die es vielleicht einen ganz anderen Lösungsweg gibt?

            Lo!

            1. Daraus kann ich nicht entnehmen, was du da konkret machst.

              Naja, ich dachte, dass ich einfach die gesamte Tabelle..

              http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp

              ..in das Array einspeise also [$text] => [$bin]. Wenn ich dann $array["ä"] mir ausgeben lasse kommt der korrekte bin-code.

              Nee, das ist der Versuch einer Problemlösung. Aber welches Problem hast du insgesamt? Geht es nur darum, alle Bytes einer Zeichenkette in binär darzustellen oder ist das auch nur der Versuch eine übergeordnete Aufgabe zu lösen, für die es vielleicht einen ganz anderen Lösungsweg gibt?

              Nee, ne andere Möglichkeit gibt es nicht. Ich möchte halt Text in 0en und 1en darstellen. Das ist alles.
              :-)

              1. Hi!

                Naja, ich dachte, dass ich einfach die gesamte Tabelle..
                http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp
                ..in das Array einspeise also [$text] => [$bin]. Wenn ich dann $array["ä"] mir ausgeben lasse kommt der korrekte bin-code.

                Das löst das Problem mit UTF-8-Umlauten nicht, sondern verfälscht die ganze Sache nur. Ein UTF-8-ä sind nun mal zwei Bytes oder 16 Bits.
                Wenn du das ignorierst und deinen PHP-Code als UTF-8 speicherst, dann hast du da quasi ein

                $array['2-byte-utf-8-ä'] = 'bitfolge';

                Dann kommst du mit einem ä daher, was ebenfalls UTF-8-kodiert vorliegt, triffst diesen Tabelleneintrag und scheinbar ist alles bestens. Doch wenn entweder Code oder Zeichen in anderen Kodierungen gespeichert sind, dann ist 1-byte-iso8859-1-ä nicht gleich 2-byte-utf-8-ä und du findest in der Tabelle nichts.

                Zudem musst du aus einem Text auch erst die Zeichen extrahieren. PHP ist (in Versionen kleiner als 6, also auch in der aktuellen 5.x) nicht wirklich UTF-8-fähig. Es arbeitet bei Mehrbyte-Kodierungen Byteweise, nicht Zeichenweise, wenn du nicht gerade die MultiByte-Extension-Fukntionen verwendest.

                Ich möchte halt Text in 0en und 1en darstellen. Das ist alles.

                So ein Text ist ja nur für dich als Menschen ein Text. Für den Computer sind es Bytes, und das je nach gewählter Kodierung unterschiedlichen. Es bringt dir sicher nicht viel, wenn du einen tatsächlich als UTF-8 kodierten Text in der Binärvariante von ISO-8859-1 darstellen lässt.

                Ich frag ja nicht grundlos so hartnäckig nach dem eigentlichen Sinn dieses Vorhabens. Was willst du mit dieser Binärdarstellung zeigen?

                Lo!

                1. Ich möchte halt Text in 0en und 1en darstellen. Das ist alles.

                  So ein Text ist ja nur für dich als Menschen ein Text. Für den Computer sind es Bytes, und das je nach gewählter Kodierung unterschiedlichen. Es bringt dir sicher nicht viel, wenn du einen tatsächlich als UTF-8 kodierten Text in der Binärvariante von ISO-8859-1 darstellen lässt.

                  Ich frag ja nicht grundlos so hartnäckig nach dem eigentlichen Sinn dieses Vorhabens. Was willst du mit dieser Binärdarstellung zeigen?

                  Naja, ich will halt wirklich nur einen Text in Binärcode übersetzen,
                  damit er schön lustig kodiert ist -
                  um ihn dann an anderer Stelle wieder in für uns normal lesbaren Text zurück zu übersetzen.

                  Genau so wie die vielen Binärübersetzer die es im Web gibt tun - nur halt selbstgemacht. (Hätte es ja nicht für möglich gehalten, dass das soo kompliziert ist.. ;))

                  1. Hi!

                    Naja, ich will halt wirklich nur einen Text in Binärcode übersetzen,
                    damit er schön lustig kodiert ist -
                    um ihn dann an anderer Stelle wieder in für uns normal lesbaren Text zurück zu übersetzen.

                    OK, dann ist es also nur zum Spaß und der eventuell auftretende Konvertierungsverlust nicht weiter tragisch.

                    Lo!