Как преобразовать строку в массив и преобразовать каждое шестнадцатеричное значение в массиве в десятичное в python?

#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