Как преобразовать 24-байтовый байтовый массив в 16-байтовый байтовый массив в Python?

#python #arrays #byte

#питон #массивы #байт

Вопрос:

У меня есть массив байтов b_a . len(b_a) возвращает 24. Но я хочу сделать b_a длину 16 без потери данных. Есть ли какой-нибудь способ для этого?

Комментарии:

1. Вы просто хотите удалить последние 8 байт? К какому типу относится массив ( list , bytes , …)?

2. Я не хочу потери данных. Есть ли какой-нибудь способ сделать это? Это тип есть bytearray . Я переделал его из bytes .

3. Если вы преобразуете 24 байта в 16 байт, должна быть потеря данных, верно? необходимо удалить 8 байтов, вопрос только в том, какие именно.

Ответ №1:

Зависит от того, как вы хотите этого добиться. Если его длина равна 24, то в нем, очевидно, 24 элемента. Если вы хотите сделать его 16, вам придется удалить 8 элементов.

Вы можете сделать это с помощью:

Нарезка:

 b_a = b_a[:16]
 

или

 b_a = b_a[8:]
 

или любая комбинация:

 b_a = b_a[2:18]
 

Или вы могли .pop() бы элементы:

 b_a.pop(). # do this 8 times
 

или

 b_a.pop(some_index). # do this 8 times
 

Ответ №2:

Вы также можете разделить bytearray на фрагменты, подобные строкам. Итак len(mybytearray[0:16])

Но это не будет хорошо работать. Потому что в разных наборах кодировок (utf-8, ascii …) Символы занимают разное количество чисел. Вот почему нам нужно знать, с помощью чего вы закодировали свой bytearray.

Это может все еще работать для вас:

 mybyte = bytearray("uğurcanveözlemkardeşler", 'utf-8')
mybyte16 = mybyte[0:16]
mybyte16