[python] Преобразование двоичных файлов в ASCII и наоборот


Answers

Я не уверен, как вы думаете, что вы можете делать это иначе, чем по-характеру, - по сути, это пошаговая операция. Конечно, есть код для этого, но нет «более простого» способа, чем его поэтапный характер.

Во-первых, вам нужно 0b префикс 0b , а левую-нуль-pad - на строку, так что длина делится на 8, чтобы облегчить разделение битовой строки на символы:

bitstring = bitstring[2:]
bitstring = -len(bitstring) % 8 * '0' + bitstring

Затем вы разделите строку на блоки из восьми двоичных цифр, преобразуйте их в ASCII-символы и присоедините их обратно к строке:

string_blocks = (bitstring[i:i+8] for i in range(0, len(bitstring), 8))
string = ''.join(chr(int(char, 2)) for char in string_blocks)

Если вы действительно хотите рассматривать его как число, вам все равно придется учитывать тот факт, что самый левый символ будет длиной не более семи цифр, если вы хотите идти слева направо, а не справа налево.

Question

Используя этот код, чтобы взять строку и преобразовать ее в двоичный:

bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in 'hello'), 0))

эти результаты:

0b110100001100101011011000110110001101111

Который, если я помещаю его в этот сайт (на правом сайте), я получаю свое hello . Мне интересно, какой метод он использует. Я знаю, что я мог бы объединить строку двоичного кода в 8, а затем сопоставить ее с соответствующим значением bin(ord(character)) или каким-либо другим способом. Действительно ищет что-то более простое.




Это мой способ решить вашу задачу:

str = "0b110100001100101011011000110110001101111"
str = "0" + str[2:]
message = ""
while str != "":
    i = chr(int(str[:8], 2))
    message = message + i
    str = str[8:]
print message



если вы не хотите импортировать какие-либо файлы, вы можете использовать это:

with open("Test1.txt", "r") as File1:
St = (' '.join(format(ord(x), 'b') for x in File1.read()))
StrList = St.split(" ")

для преобразования текстового файла в двоичный файл.

и вы можете использовать это, чтобы преобразовать его в строку:

StrOrgList = StrOrgMsg.split(" ")


for StrValue in StrOrgList:
    if(StrValue != ""):
        StrMsg += chr(int(str(StrValue),2))
print(StrMsg)

надеюсь, что это полезно, я использовал это с помощью специального пользовательского шифрования для отправки через TCP.




Related