Portál AbcLinuxu, 13. května 2025 21:58

Dotaz: Vypsani binarniho retezec v Pythonu

19.4.2012 11:51 Michalick
Vypsani binarniho retezec v Pythonu
Přečteno: 205×
Odpovědět | Admin
Narazil jsem pri psani sveho skriptu na nasledujici problem:
>>> a = '\38\44\06\6d\26\49\13\1a'
>>> print a
8$d9
    a
>>> 
A to ze pri vypisu pres print se vytisnou znaky po prevodu do ASCII. Jakym zpusobem mohu docilit toho, abych retezec a vypsal pomoci print opravdu jako "\38\44\06\6d\26\49\13\1a"?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.4.2012 12:54 NNN
Rozbalit Rozbalit vše Re: Vypsani binarniho retezec v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Odescapovat lomitka ?
a = '\\38\\44\\06\\6d\\26\\49\\13\\1a'
NN
19.4.2012 15:30 pacholik | skóre: 10
Rozbalit Rozbalit vše Re: Vypsani binarniho retezec v Pythonu
nebo stačí před řetězec napsat r
a = r'\38\44\06\6d\26\49\13\1a'
printf 'čapí' | tee /dev/stdin
rADOn avatar 19.4.2012 17:37 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Vypsani binarniho retezec v Pythonu
Ale fuj, tím se změní obsah toho řetezce. Escapovanou verzi lze získat funkcí repr(). Pokud chceš jen zamanglovat paznaky, pomocí metody .encode() ho můžeš překódovat do různých zajímavých tvarů (base64, uuencode, hex, quoted printable… viz RTFM)
"2^24 comments ought to be enough for anyone" -- CmdrTaco
20.4.2012 09:32 pet
Rozbalit Rozbalit vše Re: Vypsani binarniho retezec v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A uvedomujes si vubec, co v tom retezci vlastne mas?
>>> a = '\38\44\06\6d\26\49\13\1a'
>>> len( a )
12
>>> print map( None, a )
['\x03', '8', '$', '\x06', '\x06', 'd', '\x16', '\x04', '9', '\x0b', '\x01', 'a']
>>> 
To, co jsi chtel, je zrejme:
>>> a = '\x38\x44\x06\x6d\x26\x49\x13\x1a'
>>> len( a )
8
>>> print map( None, a )
['8', 'D', '\x06', 'm', '&', 'I', '\x13', '\x1a']
>>> 
A pak tedy:
>>> print ''.join( map( lambda c : '\%02x' % ord( c ), a ) )
\38\44\06\6d\26\49\13\1a
>>> print ''.join( map( lambda c : '\\x%02x' % ord( c ), a ) )
\x38\x44\x06\x6d\x26\x49\x13\x1a
>>> 

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.