#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