Binärcode Reader (zu Zeichen umwandeln) (Zeichenketten)
Schreiben Sie Programm, dass einen beliebigen Binärcode in lesbare Zeichen umwandelt!
Zu Zeichen zählen alle in Ihrem Code vorkommenden Buchstaben, Sonderzeichen und Ziffern (z. B. "a", ".", "7", "?" oder "!").
Das folgende Beispiel ist im ASCII codiert (American Standard Code for Information Interchange):
Was bedeutet dieser Binärcode: "010010000110000101101100011011000110111100100001"?
Sie dürfen durchaus eine andere Codierung (wie UTF-8 oder EBCDIC) verwenden. Achtung: Die Codierung von Zeichen im ASCII sind im UTF-8 identisch; was aber im ANSI (ISO-LATIN-8859) nicht für alle Zeichen gilt!
2 Kommentare
9 Lösung(en)
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Binärcode eingeben: ");
String line = sc.nextLine().replace(" ", "");
String splitt = Arrays.toString(line.split("(?<=\\G........)"));
String[] splitted = splitt.replace("[", "").replace("]", "").split(", ");
sc.close();
for (String s : splitted) {
if (s.length() == 8) {
int i = Integer.parseInt(s, 2);
System.out.print((char) i);
} else {
for (int i = 0; i < 100; i++) {
System.out.println("ERROR");
}
}
}
}
}
Lösung von: Name nicht veröffentlicht
function bin2txt(input) {
var output = "",
i = 0;
for (i; i < input.length; i += 8)
output += String.fromCharCode(parseInt(input.substr(i, 8), 2));
return output;
}
console.log(bin2txt("010010000110000101101100011011000110111100100001"));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
import binascii
class binary_reader():
# From Words to Binary
def w2b(self):
print "Please type in your words or sentence to convert them into binary code:"
words = raw_input(">> ")
wordsTObinary = bin(int(binascii.hexlify(words), 16)).replace("0b", "")
print wordsTObinary
# From Binary to Words
def b2w(self):
print "Please type in your binary code to convert them into words or a sentence:"
b = raw_input(">> ")
binaries = int(b, 2)
binaryTOwords = binascii.unhexlify("%x" % binaries)
print binaryTOwords
if __name__ == '__main__':
binary_reader().w2b()
binary_reader().b2w()
Lösung von: L. Fino (Lupfig Codes)
'3.3.2017 - PowerBASIC 10
'mit integrierter Umwandlung Binär -> Unicode
#COMPILE EXE
#DIM ALL
FUNCTION PBMAIN () AS LONG
DIM i AS INTEGER
DIM strIn AS STRING
DIM strOut AS STRING
strIn = "010010000110000101101100011011000110111100100001"
FOR i = 1 TO LEN(strIn) STEP 8
strOut = strOut & CHR$$(VAL("&B" & MID$(strIn,i,8)))
NEXT i
MSGBOX strIn & $CRLF & strOut,,EXE.NAME$
END FUNCTION
Lösung von: Markus Sägesser (keine)
'4.3.2017 - PowerBASIC 10
'"manuelle" Umrechnung
#COMPILE EXE
#DIM ALL
FUNCTION PBMAIN () AS LONG
DIM i AS INTEGER
DIM x AS INTEGER
DIM strIn AS STRING
DIM strOut AS STRING
DIM zwStr AS STRING
DIM revStr AS STRING
DIM zwByte AS INTEGER
DIM ascii AS STRING
strIn = "010010000110000101101100011011000110111100100001"
ascii = "!" & $DQ & "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz"
'in 8 Bits splitten
FOR i = 1 TO LEN(strIn) STEP 8
zwStr = MID$(strIn,i,8)
'Reihenfolge der Bits umdrehen, um einfacher zu rechnen.
FOR x = 8 TO 1 STEP - 1
revStr += MID$(zwStr,x,1)
NEXT x
'Wert der Bits anhand der Position errechnen (2^Position - 1 * Wert der Position) -> 2^3 = 8 * 0 (falls nicht gesetzt) oder * 1 (falls gesetzt)
FOR x = 1 TO 8
zwByte += 2^(x-1) * VAL(MID$(revStr,x,1))
NEXT x
strOut += MID$(ascii,zwByte - 32,1)
revStr = ""
zwByte = 0
NEXT i
MSGBOX strIn & $CRLF & strOut,,EXE.NAME$
END FUNCTION
Lösung von: Markus Sägesser (keine)
try:
eingabe_bin = str(input("Bitte Binärzahl eingeben:"))
if len(eingabe_bin) % 8 != 0:
print("Es muss eine Binärzahl eingegeben werden, die durch 8 teilbar ist!")
splits = [eingabe_bin[x:x + 8] for x in range(0, len(eingabe_bin), 8)] # list comprehension
for item in range(0, len(splits)):
dual = int(splits[item], 2)
uni_code = chr(dual)
print(uni_code, end="")
except Exception as e:
print("Es ist etwas schiefgelaufen! \n", e)
Lösung von: Dominic Ra ()
/*
* Programmieraufgabe: Binärcode Reader (zu Zeichen umwandeln)
* https://www.programmieraufgaben.ch/aufgabe/binaercode-reader-zu-zeichen-umwandeln/h8nkecsd
*/
/**
* Umwandlung eines Binärcodes in einen String.
* Verwendet den US-ASCII Zeichensatz.
* @param code Der Binärcode als String.
* @return Die Zeichen im Code als String.
*/
fun reader(code: String): String {
// Ein Byte besteht aus maximal 8 Bits. Sind die Bytes durch
// Leerzeichen getrennt, dann sind weniger als 8 Bit möglich.
val bytePattern = Regex("""[01]{1,8}\s*""")
return bytePattern
.findAll(code)
.map { it.value.toByte(2) }
.toList()
.toByteArray()
.toString(Charsets.US_ASCII)
}
/**
* Testfall aus der Aufgabe ausführen.
* @param args wird ignoriert.
*/
fun main(vararg args: String) {
val code = "010010000110000101101100011011000110111100100001"
val result = reader(code)
assert(result == "Hallo!")
println("$code = $result")
}
Lösung von: Ulrich Berntien ()
inp = input("Binärzahl: ")
print("".join([chr(int(inp[i:i+8], base=2)) for i in range(0, len(inp), 8)]))
Lösung von: Name nicht veröffentlicht
// NET 6.x | C# 10.x | VS-2022
string BinToString(string bin) {
if (bin.Length % 8 != 0) return string.Empty;
return string.Join("", new System.Text.RegularExpressions.Regex(@"\d{8}").Matches(bin).Select(x => (char)Convert.ToInt32(x.ToString(), 2)));
}
Console.WriteLine(BinToString("010010000110000101101100011011000110111100100001"));
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Lösung: "Hallo!"
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Kommentare (2)
Für mich war nach einigem Rumprobrieren eigentlich klar, worum es geht: Teilung der Bits in 8-Abteilungen, und da ASCII/ANSII quasi gleich mit dem UTF-Spektrum sind, ist die Aufgabe letzten Endes ordinär.
Für den Löser der Aufgabe spielt dass dann eine Rolle, wenn sein System (z. B. PL/I auf dem Großrechner) kein ASCII kennt und obiger Code ausgewertet werden sollte. Eventuell kann man hier einen zweiten Binärcode angeben oder die Aufgabe etwas präzisieren.