Comments on: Lire un format binaire en Python avec struct http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/ Du code, du cul Sat, 07 Nov 2015 11:08:18 +0000 hourly 1 http://wordpress.org/?v=4.1 By: Romain http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162850 Thu, 02 Jul 2015 07:14:40 +0000 http://sametmax.com/?p=16503#comment-162850 Effectivement, ça peut faire le taf… si on ajoute https://pypi.python.org/pypi/asn1ate/0.5 avec parce que se taper une grammaire asn.1 à la main n’est pas un sort enviable !

J’y penserai la prochaine fois que je devrai décoder des fichiers TAP :D

]]>
By: Sam http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162691 Mon, 29 Jun 2015 18:10:33 +0000 http://sametmax.com/?p=16503#comment-162691 https://pypi.python.org/pypi/pyasn1 :)

]]>
By: Romain http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162685 Mon, 29 Jun 2015 15:56:20 +0000 http://sametmax.com/?p=16503#comment-162685 C’est vrai que c’est un module assez génial et en même temps c’est dommage que la description du format soit si cryptique (quoique ce ne doit pas tellement pire que des regexes).

À quand un article sur du décodage asn1 en python :-) ?

]]>
By: kontre http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162673 Mon, 29 Jun 2015 12:05:37 +0000 http://sametmax.com/?p=16503#comment-162673 @YCL1 Le problème de ctypes c’est qu’il n’y a aucun garde-fou, quand ça merde ça segfault python lui-même (ce qui a peu de chance d’arriver avec des uint, certes). Au moins struct est safe. De plus ton exemple se fait assez facilement avec struct.

]]>
By: Sam http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162609 Sat, 27 Jun 2015 06:26:11 +0000 http://sametmax.com/?p=16503#comment-162609 Bien vu. Une des conneries de la PSF est leur volonté de rediriger par défaut sur la doc de la 2.7.

]]>
By: cendrieR http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162604 Sat, 27 Jun 2015 04:26:15 +0000 http://sametmax.com/?p=16503#comment-162604 Merci pour l’article !

Petite question : le lien vers la doc pointe toujours sur python 2.7. Tu ne voulais pas encourager le passage en python 3 ?

]]>
By: YCL1 http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162592 Fri, 26 Jun 2015 23:26:24 +0000 http://sametmax.com/?p=16503#comment-162592 Argh le commentaire a tout modifié..

http://pastebin.com/G7FjUJLh

]]>
By: YCL1 http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162590 Fri, 26 Jun 2015 23:18:43 +0000 http://sametmax.com/?p=16503#comment-162590 struct est pratique pour convertir rapidement des éléments de même taille, regrouper des blocs pour en calculer le checksum par exemple.

Mais c’est beaucoup moins aisé quand il s’agit d’extraire des éléments de taille variables, de structurer des éléments.

Les structures ctypes sont beaucoup plus efficaces pour décoder/décommuter des paquets binaires.

Une petite démo :

 
import ctypes
 
class Header_Decoder(ctypes.BigEndianStructure): # {
    _pack_ = 1
    _fields_ = [
        ('protocol_id', ctypes.c_uint8, 8),      # 1 byte:  byte 1,      bits 00-07
        ('segmentation', ctypes.c_uint8, 3),     # 3 bits:  byte 2,      bits 08-10
        ('transaction_type', ctypes.c_uint8, 5), # 5 bits:  byte 2,      bits 11-15
        ('packet_length', ctypes.c_uint32),      # 4 bytes: bytes 3-6,   bits 16-47
        ('checksum', ctypes.c_uint16),           # 2 bytes: bytes 7-8,   bits 48-63
    ]
# } Header_Decoder
 
HEADER_LENGHT_BYTES = ctypes.sizeof(Header_Decoder)
 
packet = b'\xFF\x10\x00\x00\x00\x0C\x00\xE3\x48\x65\x79\x21'
 
header = Header_Decoder.from_buffer_copy(packet[0 : 0 + HEADER_LENGHT_BYTES])
 
print("Protocol ID:", header.protocol_id)
print("Segmentation:", header.segmentation)
print("Transaction type:", header.transaction_type)
print("Checksum:", header.checksum)
print("Data:", packet[HEADER_LENGHT_BYTES : header.packet_length].decode('ascii'))
]]>
By: buffalo974 http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162588 Fri, 26 Jun 2015 20:24:36 +0000 http://sametmax.com/?p=16503#comment-162588 Un conseil ou un tuyau, pour un pythoniste amateur qui voudrait faire un peu de C++, pour améliorer son python, par curiosité et par “plaisir” ?

]]>
By: boblinux http://sametmax.com/lire-un-format-binaire-en-python-avec-struct/#comment-162587 Fri, 26 Jun 2015 20:21:27 +0000 http://sametmax.com/?p=16503#comment-162587 @Moato

Au pire, si tu veux vraiment une réponse à ta question, va faire un tour sur http://indexerror.net/questions , j’suis sûr que tu trouveras un tas de mecs (oé, les meufs c’est une espece en voie d’extinction dans le monde du dev) dispo pour répondre à ta question !

ps : fu..k les balises html

]]>