أحرف غير ثنائية (HEX) في السلسلة المستلمة على TCP مع Python

StackOverflow https://stackoverflow.com/questions/3906903

سؤال

ربما هذا سؤال noob ، لكنني أتلقى بعض البيانات عبر TCP وعندما أنظر إلى السلسلة أحصل على ما يلي:

\x00\r\xeb\x00\x00\x00\x00\x01t\x00

ما هذا \r الشخصية وماذا يفعل t في \x01t يعني؟

لقد جربت Googling ، لكنني لست متأكدًا مما يجب على Google لـ ...

شكرًا.

هل كانت مفيدة؟

المحلول

قد يكون عرض البيانات الثنائية في الأوتار أمرًا مربكًا في بعض الأحيان ، خاصةً إذا كانت طويلة ، ولكن يمكنك دائمًا تحويلها إلى بعض السداسي السحرية.

>>> data = '\x00\r\xeb\x00\x00\x00\x00\x01t\x00'
>>> ' '.join(["%02X" % ord(char) for char in data])
'00 0D EB 00 00 00 00 01 74 00'

وأيضًا ، إذا كنت تقوم فقط بتحليل سلسلة البايت في الحقول ، فما عليك سوى تجاهل السلسلة واذهب لتفريغها مع struct وحدة:

>>> import struct
>>> length, command, eggs, spam = struct.unpack('!BBi4s',data)
>>> #...whatever your fields really are
>>> print "len: %i\ncmd: %i\negg qty: %i\nspam flavor: '%s'" % (
...     length, command, eggs, spam)
len: 0
cmd: 13
egg qty: -352321536
spam flavor: ' ☺t '

نصائح أخرى

\r هو عودة عربة (0x0D) ، t هو t.

عند عرض البيانات كسلسلة ، يتم عرض أحرف قابلة للطباعة (مثل "t" كحرف ، يتم عرض تسلسل التحكم المعروف على أنها هروب ، ويتم عرض البايتات الأخرى في نموذج x ##. مثال:

>>> s='\x74\x0d\x99'
>>> s
't\r\x99'

يمكنك تفريغ شكل سداسي عشري مع:

>>> import binascii
>>> binascii.hexlify(s)
'740d99'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top