2014-11-13 2 views
0

Я хочу создать строку длиной 5 гекс-байтов, которая будет отправляться через сокет. Я хочу, чтобы 255 пакетов меняли третий байт инкрементно. Как я могу это сделать? Нечто подобное этому коду:Вставить шестнадцатеричное значение в середине строки python

i=0  
while True: 
     a="\x3f\x4f"+hex(i)+"\x0D\x0A" 
     socket.send(a) 
     i=i+1 

Проблема заключается в том, что этот код представляет 0x0 (30 78 30) вместо 00 в первом цикле, например.

Спасибо

+0

В качестве побочного примечания вы можете посмотреть 'bytearray'. Это своего рода гибрид между «str» и «list» из маленьких целых чисел. Например, вы можете построить его как 'bytearray ('\ x3f \ x4f \ x00 \ x0d \ x0a')' или как 'bytearray ([0x3f, 0x4f, 0x00, 0x0d, 0x0a])', затем выполните 'a [2 ] = i' без необходимости конвертировать, а также делать 'socket.send (a)' без необходимости конвертировать. – abarnert

ответ

1

Я думаю, вы немного смущены здесь.

\x3f - это один символ (тот же символ, что и ?).

Если i, скажем, 63 (шест 3F), вы не хотите, чтобы добавить отдельные символы \\, x, 3 и f к строке, вы хотите добавить один символ \x3f. Аналогично, если это 0 (hex 00), вы не хотите добавлять отдельные символы \\, x, 0 в строку, вы хотите добавить единственный символ \x0.


Это именно то, что функция chr для:

Возвращает строку из одного символа, чей ASCII-код является целым числом я. Например, chr(97) возвращает строку 'a' ...


В противоположность этому, функция hex будет:

[с] onvert целое число (любого размера) в нижнем регистре шестнадцатеричной строки с префиксом с "0x" ...

Таким образом, hex(97) возвращает четыре строки символов '0x61'.

+0

Отлично работает! Я был в неправильном направлении. Спасибо. –

Смежные вопросы