Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Wangarad 16. 02. 2021, 11:12:53

Název: Python 3 konverzia Hex
Přispěvatel: Wangarad 16. 02. 2021, 11:12:53
Potreboval by som trosku poradit ako skonvertovat string do hexa v python 3. Nie je mi celkom jasne ci si pletiem pojmy alebo dojmy ale dajme tomu ze mam zapisovat takyto format
Kód: [Vybrat]
Data: 00,FF FF FF FF    =        Format,    00, Memory address 00 – 7F (00 – 127) 
FF FF FF FF LSB in Hex
Ako skonvertujem v pythone napriklad cislo 1254 alebo string Janko do tohoto formatu? To prve mi je jasne je to adresa kde chcem zapisovat ale nie je mi jasny ten format LSB in Hex skrz co to skonvertovat v pythone 3?
Název: Re:Python 3 konverzia Hex
Přispěvatel: Petr Blahos 16. 02. 2021, 11:40:39
Sice nechápu otázku, ale odpověď je modul struct.
Název: Re:Python 3 konverzia Hex
Přispěvatel: Wangarad 16. 02. 2021, 14:17:15
Skusim inak ako v pythone skonvertovat napriklad cislo 150 do 4 byte hex?
Název: Re:Python 3 konverzia Hex
Přispěvatel: Tomas-T 16. 02. 2021, 14:36:35
Proč řešíš, kolik bude mít výsledek bytes?
Pokud chceš číslo vypsat v hexa formátu, máš funkci Hex().
Pokud chceš znak vypsat v hexa formátu, přidej funkci Ord() = kód znaku (ascii/unicode).
Pokud chceš v hexa delší text, hoď to do smyčky znak po znaku.
Pokud chceš aby výsledek (string) vypadal jako 4 bajty, doplň ho zleva potřebnými nulami.

Pokud to potřebuješ k něčemu jinému než zobrazení, tak asi nemá smysl řešit formát a máš špatné zadání.
Název: Re:Python 3 konverzia Hex
Přispěvatel: tecka 16. 02. 2021, 19:53:12
Kód: [Vybrat]
>>> struct.pack('<L', 150).hex()
'96000000'
>>> 'Janko'.encode().hex()
'4a616e6b6f'
Název: Re:Python 3 konverzia Hex
Přispěvatel: Wangarad 17. 02. 2021, 12:25:55
Tomas-T : Musim lebo by to malo mat 4 bity dokopy
Nerozumiem tomu.
Takto by sa to malo kodovat ked napisem bitearray
Kód: [Vybrat]
01110000 00000010 10011000 01010100 = 07 54 98 02 70 s tym ze 07 je adresa.
Za toho pana neviem ako to mam formatovat tak by to vychadzalo v tom formate.

Název: Re:Python 3 konverzia Hex
Přispěvatel: Tomas-T 17. 02. 2021, 16:44:25
Máš to nějaké zmatené.
Nesedí ti pozice čísel vlevo a vpravo, protože:
01110000 = 0x70
00000010 = 0x2
10011000 = 0x98
01010100 = 0x54
Navíc nějak nechápu, jak souvisí zrovna tahle čísla s půodním číslem 150 nebo s textem "Janko".
A zaměňovat bity a byty srozumitelnosti taky moc nepomáhá.

Zdá se že v tom sám nějak plaveš a nejsi schopný dát dohromady ani zadání, co vlastně opravdu potřebuješ - bez znalosti širšího kontextu (chceš to posílat z PC na nějakou periférii? Je to něco v RPi? Je to teoretický příklad ze školy? Pak by to asi chtělo celé zadání) ti s tím asi nikdo neporadí.
Název: Re:Python 3 konverzia Hex
Přispěvatel: Wangarad 18. 02. 2021, 08:08:26
Tomas-T Dakujem. To som chcel vcera napisat ale uz som nemal sil.
Hej tie 2 bity sa medzi sebou prehadzuju. Pre tvoje info je to mapa pre cipy ktora ma asi 250 adries po 32 bitov a pre tu zapisovaciu hlavu sa este musia po 2 otacat a niektore su tak debilne napisane ze nemas presne 8 bitov na celu dlzku pre jeden udaj ale ja neviem prve 2 s tych 8 su pre jeden udaj potom 2 pre iny a zvysok pre prvy aby to bolo kvazy safety. (Je to pre jednu relativne velku farma firmu). A bavime sa o zapise kodu do cipu ktory riesi overovanie. Su tam ako cisla tak aj stringy.

Potreboval som sa len odpichnut a pochopit co vlastne chcu. Kazdopadne pre teba palec hore. Poradil si dobre.
Název: Re:Python 3 konverzia Hex
Přispěvatel: Wangarad 19. 02. 2021, 07:40:16
Este by mozno niekto vedel poradit s jednou pataliov okolo tohoto .
Problem je ze s DB mi lezie string ktory obsahuje binany kod (suck)
Nieco ako
Kód: [Vybrat]
000000110101000001010100100101010 to konvertujem na INT pretoze
Kód: [Vybrat]
hex(int(Block34, 2)); s tymto to dostanem do formatu ako potrebujem.
Pokial je prve cislo 1 je to ok ale pri tej konverzii mi to samozrejme odstrihne 000000
co s tym?
Název: Re:Python 3 konverzia Hex
Přispěvatel: Petr Blahos 19. 02. 2021, 08:42:10
Jestli dobře rozumím na co se ptáš, tak:
   
Kód: [Vybrat]
    print("%08X" % number)
    print("%08x" % number)
a na porovnání:   
Kód: [Vybrat]
    print("%X" % number)
    print("%x" % number)
Název: Re:Python 3 konverzia Hex
Přispěvatel: tecka 20. 02. 2021, 03:20:34
co s tym?
Nic, protože je to nesmysl. Řešení tu máš už dvakrát.
Název: Re:Python 3 konverzia Hex
Přispěvatel: Wangarad 22. 02. 2021, 08:22:34
Petr Blahos
Kód: [Vybrat]
data = '0000000000000000000000000001100'

print("%08X" % data)
Traceback (most recent call last):
  File "c:\RFID_BACKUP\test_xml.py", line 4, in <module>
    print("%08X" % data)
TypeError: %X format: an integer is required, not str   

mne je jasne ze tamje Integer. Moj problem je ze tie data prichadzaju ako string. Teda v momente ked konverzujem na int tak
Kód: [Vybrat]
data = '0000000000000000000000000001100'
int_data = int(data)
1100
print(int_data)
a to je moj problem. ze ta konverzia zahadzuje 00000. v PHP to ide ako oci.
Název: Re:Python 3 konverzia Hex
Přispěvatel: Wangarad 22. 02. 2021, 10:12:02
A spravna odpoved je strasne jednoducha
Kód: [Vybrat]
data = '00000010000000000101000010110100'


def data_to_hexa(data):
 hd = (len(data) + 3) // 4
 output = '{:0{}x}'.format(int(data, 2), hd)
 return output


print(data_to_hexa(data))
PS C:\Users\t> & python c:/test/convert.py
020050b4