Zdravím.
Takže převádění znaků na binární kód už sem vyřešil (minulé téma), ale zasekl jsem se u jiné věci: převádění binárního kódu na znaky. Vím jak na to (viz. skript), ale zatím umím převádět jenom jeden byte. Jako že musím zadat osm jedniček nebo nul a to mi vyhodnotí jako jeden znak. potřeboval bych ale, aby ten program uměl i několik bytů najednou (abych nemusel zadávat jednotlivé byty). Třeba že bych do vstupního pole zadal: 01000001 01001001 01001111 01001010 a vyhodnotilo by mi to jako AHOJ. Má někdo nějaké nápady? Napadlo mě nějak ten řetězec "rozsekat", ale nevím jak na to. V Pythonu nejsem ještě tak zkušený... (asi m?s?c)
Skript:
# -*- coding: cp1250 -*-
#autor: vojtech
#import
from Tkinter import *
#definovani funkci:
def vynulovat_fce():
vstup.delete(0,"end")
vystup.delete(0,"end")
def asciitobin_fce():
vystup.delete(0, "end")
bin_veta=""
veta=vstup.get()
for znak in veta:
znak=ord(znak)
hex_znak=hex(znak)
if hex_znak[-2]=="0": bin_veta=bin_veta+" 0000"
if hex_znak[-2]=="1": bin_veta=bin_veta+" 0001"
if hex_znak[-2]=="2": bin_veta=bin_veta+" 0010"
if hex_znak[-2]=="3": bin_veta=bin_veta+" 0011"
if hex_znak[-2]=="4": bin_veta=bin_veta+" 0100"
if hex_znak[-2]=="5": bin_veta=bin_veta+" 0101"
if hex_znak[-2]=="6": bin_veta=bin_veta+" 0110"
if hex_znak[-2]=="7": bin_veta=bin_veta+" 0111"
if hex_znak[-2]=="8": bin_veta=bin_veta+" 1001"
if hex_znak[-2]=="9": bin_veta=bin_veta+" 1001"
if hex_znak[-2]=="a": bin_veta=bin_veta+" 1010"
if hex_znak[-2]=="b": bin_veta=bin_veta+" 1011"
if hex_znak[-2]=="c": bin_veta=bin_veta+" 1100"
if hex_znak[-2]=="d": bin_veta=bin_veta+" 1101"
if hex_znak[-2]=="e": bin_veta=bin_veta+" 1110"
if hex_znak[-2]=="f": bin_veta=bin_veta+" 1111"
if hex_znak[-1]=="0": bin_veta=bin_veta+"0000"
if hex_znak[-1]=="1": bin_veta=bin_veta+"0001"
if hex_znak[-1]=="2": bin_veta=bin_veta+"0010"
if hex_znak[-1]=="3": bin_veta=bin_veta+"0011"
if hex_znak[-1]=="4": bin_veta=bin_veta+"0100"
if hex_znak[-1]=="5": bin_veta=bin_veta+"0101"
if hex_znak[-1]=="6": bin_veta=bin_veta+"0110"
if hex_znak[-1]=="7": bin_veta=bin_veta+"0111"
if hex_znak[-1]=="8": bin_veta=bin_veta+"1001"
if hex_znak[-1]=="9": bin_veta=bin_veta+"1001"
if hex_znak[-1]=="a": bin_veta=bin_veta+"1010"
if hex_znak[-1]=="b": bin_veta=bin_veta+"1011"
if hex_znak[-1]=="c": bin_veta=bin_veta+"1100"
if hex_znak[-1]=="d": bin_veta=bin_veta+"1101"
if hex_znak[-1]=="e": bin_veta=bin_veta+"1110"
if hex_znak[-1]=="f": bin_veta=bin_veta+"1111"
vystup.insert(0, bin_veta)
def bintoascii_fce():
znak=vstup.get()
dec_veta=0
if znak[-1] == "1":
dec_veta=dec_veta+1
if znak[-2] == "1":
dec_veta=dec_veta+2
if znak[-3]== "1":
dec_veta=dec_veta+4
if znak[-4] == "1":
dec_veta=dec_veta+8
if znak[-5] == "1":
dec_veta=dec_veta+16
if znak[-6] == "1":
dec_veta=dec_veta+32
if znak[-7] == "1":
dec_veta=dec_veta+64
if znak[-8] == "1":
dec_veta=dec_veta+128
print dec_veta
dec_veta=chr(dec_veta)
vystup.insert(0,dec_veta)
print dec_veta
def napoveda_fce():
nap=Toplevel()
nap.title('Napoveda')
nap.transient(hlavni_okno)
nap.focus_set() # aby bylo okno aktivn?
Label(nap,text='Napoveda k programu abc_to_bin_and_back', font=("Arial", '14')).pack()
Label(nap, text=__doc__, font=("Arial")).pack()
textN="""Do vstupniho pole zadejte pozadovany vyraz pro prelozeni
(retezec znaku pro prevod do dvojkoveho kodu).
Byty zadavejte samostatne jeden po druhem (zadejte napr. 01000001,
vyhodnotte, vynulujte, zadejte 01011000, vyhodnotte...)
Vysledek se vam zobrazi ve vystupnim poli, odkud ho muzete pres schranku
zkopirovat a pouzit.
Tento program je siren pod licenci GNU/GPL, ve zdrojovem adresari najdete
ve slozce "source" zdrojovy kod ve formatu *.py i *.txt
"""
Label(nap,text=textN, font=("Arial")).pack()
Button(nap, text='OK', command= nap.destroy).pack(ipadx=100, padx=5,pady=5)
nap.mainloop()
#viditelna cast:
#hlavni okno:
hlavni_okno=Tk()
hlavni_okno.title("Prekladac Bin <=> ASCII")
#ramecky:
ramecek1=Frame(hlavni_okno)
ramecek1.pack()
ramecek2=Frame(hlavni_okno)
ramecek2.pack()
ramecek3=Frame(hlavni_okno)
ramecek3.pack()
ramecek4=Frame(hlavni_okno)
ramecek4.pack()
#widgety:
vstup1=Label(ramecek1, text="Zad?n?: ")
vstup1.pack(side=LEFT,padx=5,pady=5)
vstup=Entry(ramecek1, width=45)
vstup.pack(padx=5,pady=5)
asciitobin=Button(ramecek2, text=" ASCII => BIN ", command=asciitobin_fce)
asciitobin.pack(side=LEFT,padx=5,pady=5)
bintoascii=Button(ramecek2, text=" BIN => ASCII ", command=bintoascii_fce)
bintoascii.pack(side=LEFT, padx=5, pady=5)
vystup1=Label(ramecek3, text="V?sledek: ")
vystup1.pack(side=LEFT,padx=5,pady=5)
vystup=Entry(ramecek3, width=45)
vystup.pack(padx=5,pady=5)
vynulovat=Button(ramecek4, text=" Vynulovat ", command=vynulovat_fce)
vynulovat.pack(side=LEFT, padx=5,pady=5)
napoveda=Button(ramecek4, text=" Napoveda ", command=napoveda_fce)
napoveda.pack(padx=5, pady=5)
#smycka:
hlavni_okno.mainloop()
Jinak kdyby měl někdo nápad na zlepšení/zjednodušení/"upgrade", tak mu budu jen vděčný. Díky moc předem.