#python
#python
Вопрос:
Я хочу, чтобы следующие шаги были реализованы на python
1) строка 7f33117cf266a525
2) верхний регистр 7F33117CF266A525
3) Поместите это в массив [7F, 33,11,7C, F2,66, A5,25]
4) преобразовать его в двоичный [127,51,17,124,242,102,165,37]
и наоборот
1) двоичный файл [127,51,17,124,242,102,165,37]
2) преобразовать в шестнадцатеричное [7F, 33,11,7 C, F2,66, A5,25]
3) 7F33117CF266A525
4) 7f33117cf266a525
string="7f33117cf266a525"
print(string.upper())
T=list(string)
T
выдает вывод
[‘7’, ‘F’, ‘3’, ‘3’, ‘1’, ‘1’, ‘7’, ‘ C’, ‘F’, ‘2’, ‘6’, ‘6’, ‘ A’, ‘5’, ‘2’, ‘5’]
как разделить два символа запятой?
Комментарии:
1.
[string[i:i 2] for i in range(0, len(string), 2)]
Ответ №1:
Если вы используете Python 3.5 , вы можете использовать bytes.fromhex
метод для преобразования шестнадцатеричной строки в байты и использовать конструктор list для преобразования байтов в список целых чисел:
>>> list(bytes.fromhex('7f33117cf266a525'))
[127, 51, 17, 124, 242, 102, 165, 37]
И вы можете использовать конструктор bytes для преобразования списка целых чисел в байты и использовать bytes.hex
метод для преобразования байтов в шестнадцатеричную строку:
>>> bytes([127, 51, 17, 124, 242, 102, 165, 37]).hex()
'7f33117cf266a525'
Комментарии:
1. Следует только упомянуть
python3
, просто включить 🙂2. Действительно. Затем обновил мой ответ примечанием.
Ответ №2:
Попробуйте это для разделения каждых двух символов в string
:
T = [string[i:i 2] for i in range(0, len(string), 2)]
# T = ['7f', '33', '11', '7c', 'f2', '66', 'a5', '25']
Однако, если у вас нечетное количество символов в string
и вы хотите получить список из каждых двух символов, начиная с первого, попробуйте следующее :
T = list(map(''.join, zip(*[iter(string)]*2)))
# T = ['7f', '33', '11', '7c', 'f2', '66', 'a5', '25']
Разница в том, что если string = '7f33117cf266a5251'
возвращается первое понимание списка ['7f', '33', '11', '7c', 'f2', '66', 'a5', '25', '1']
, тогда как второе все еще возвращается ['7f', '33', '11', '7c', 'f2', '66', 'a5', '25']
Ответ №3:
На самом деле вам не следует разделять его, если вы не знаете данные,
>>> string
'7f33117cf266a525'
>>> string.upper()
'7F33117CF266A525'
>>> [ord(x) for x in string.decode('hex')]
[127, 51, 17, 124, 242, 102, 165, 37]
>>> [format(ord(x), 'x') for x in string.decode('hex')]
['7f', '33', '11', '7c', 'f2', '66', 'a5', '25']
Ответ №4:
1) Строка "7f33117cf266a525"
string = "7f33117cf266a525"
2) Верхний регистр "7F33117CF266A525"
string = string.upper()
3) Поместить это в массив ["7F","33","11","7C","F2","66","A5","25"]
string = [string[i:i 2] for i in range(0, len(string), 2)]
4) Преобразовать его в двоичный [127,51,17,124,242,102,165,37]
string = [int(x, 16) for x in string]
наоборот
1) Двоичный [127,51,17,124,242,102,165,37]
binary = [127,51,17,124,242,102,165,37]
2) Преобразовать его в шестнадцатеричное ["7F","33","11","7C","F2","66","A5","25"]
binary = [hex(x)[2:] for x in binary]
3) Строка "7f33117cf266a525"
(она уже будет в нижнем регистре)
binary = "".join(binary)
Ответ №5:
Этот код может сработать.
def split_by_n(seq, n):
while seq:
yield seq[:n]
seq = seq[n:]
string = input('enter string:') #enter input string
uppercase = string.upper() #convert to upper case
split = (list(split_by_n(uppercase, 2))) #split it by 2 characters
converted = [int(i, 16) for i in split] #convert the base to bin/decimal
print(converted) #display the output
converted_back = [hex(i)[2:] for i in converted] #convert it back to hex
back_to_string = "".join(converted_back) #join them to get string
print(back_to_string) #print the output