Как добавить двоичный файл int с двоичным файлом строки - PullRequest
0 голосов
/ 21 сентября 2010

По сути, я хочу иметь возможность получить 32-битное целое и присоединить его двоичный файл к двоичному в строке.Например (IM собирается использовать 8-битный вместо 32-битного) я хочу 255 + привет 11111111 + 0110100001101001 = 111111110110100001101001 Таким образом, int хранит свое двоичное значение, мне все равно, как это получается, я просто хочу, чтобы он мог отправлять данные через сокет.

(Это все веб-сокеты и новый ключ sec-websocket, чтобы прекратить взлом, если кто-то просто знает, как сделать рукопожатие через веб-сокет, что было бы так же приятно)

Спасибо!Я пытался это делать в течение нескольких дней, и я не один, чтобы зайти на сайт такого типа, чтобы получить ответ

РЕДАКТИРОВАТЬ

Меня попросили дать больше информации, чтобы она была полной сделкой.Я подключился к пользователю потокового порта, он прислал мне заголовки, теперь мне нужно ответить, чтобы завершить соединение.Данные для импорта:

Sec-WebSocket-Key1: 4 @ 1 46546xW% 0l 1 5 "Случайная строка, следующая правилам" (я назову это sk1)

Sec-WebSocket-Key2: 129985 Y3 1 .P00 «Случайные строки, следующие правилам» (я буду называть это sk2)

^ n: ds [4U «Случайные строки, следующие правилам» (я буду называть это sk3)

1) int1 = сжать числа в sk1 и разделить их на количество пробелов в sk1

2) int2 = сжать числа в sk2 и разделить их на количество пробелов в sk2

3) fullapend = Add, добавьте байты int2 к int1, затем добавьте байты в sk3

4) Наконец, дайджест MD5 fullapend

5) Отправьте конечный результат хосту вместе с некоторыми другими заголовками иесли они совпадают, соединение остается открытым

Это все, что должно произойти, и я не знаю, как это сделать

Закончено!

Хорошо, основные ответы обабыл прав, и я хотел бы извиниться, если я казался немного грубым, я не знал, что \ x был(что-то) означает двоичный.но это сработало.Как только у меня будет готовая функция для подключения отправки и т. Д., Я опубликую ее здесь и в другом месте, где для кого-то еще это застряло, еще раз спасибо!

Ответы [ 2 ]

3 голосов
/ 21 сентября 2010

Что-то вроде

struct.pack("!i%ds" % len(your_string), your_int, your_string)

должно делать в значительной степени то, что вы хотите!

2 голосов
/ 22 сентября 2010

Это то, что вы ищете?Не знаю, хотите ли вы после hexdigest или дайджеста, и я не могу сказать, где ключи начинаются и останавливаются, что обидно, поскольку они чувствительны к пробелам.

Также в своем обновлении вы сказали«сжать» числа, когда я думаю, что вы имели в виду «объединить».Я думаю, что полученные ключи должны быть бигендовскими, что я и сделал.

>>> import struct
>>> def processKey(data):
...     num = int("".join([x for x in data if x.isdigit()]))
...     spaces = data.count(' ')
...     return num / spaces
...
>>> key1 = '4 @1 46546xW%0l 1 5'
>>> key2 = '12998 5 Y3 1 .P00 '
>>> sk1 = processKey(key1)
>>> sk2 = processKey(key2)
>>> sk1
1036636503L
>>> sk2
259970620
>>> sk3 = "^n:ds[4U"
>>> fullappend = struct.pack('>ii%ds' % len(sk3),sk1,sk2,sk3)
>>> fullappend
'=\xc9\xd1W\x0f~\xd6<^n:ds[4U'
>>> len(fullappend)
16
>>> from hashlib import md5
>>> md5(fullappend).hexdigest()
'fd028b6b39ceb8e37f09b8e45556bbc4'
>>> md5(fullappend).digest()
'\xfd\x02\x8bk9\xce\xb8\xe3\x7f\t\xb8\xe4UV\xbb\xc4'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...