2017-09-20 1 views
1

처음에 한 바이트 배열을 다른 바이트 배열에 삽입하려고합니다. 다음은 내가 성취하고자하는 간단한 예입니다.Bytearray에 bytearray 삽입 Python

import struct 
a = bytearray(struct.pack(">i", 1)) 
b = bytearray(struct.pack(">i", 2)) 
a = a.insert(0, b) 
print(a) 

그러나 이것은 다음 오류 실패

a = a.insert(0, b) TypeError: an integer is required

답변

1

bytearray는 서열 형이며, 슬라이스 기반 동작을 지원한다. "i 위치에 삽입"관용구가있는 조각은이 x[i:i] = <a compatible sequence>과 같습니다. 그래서, 주먹 위치를 :

>>> a 
bytearray(b'\x00\x00\x00\x01') 
>>> b 
bytearray(b'\x00\x00\x00\x02') 
>>> a[0:0] = b 
>>> a 
bytearray(b'\x00\x00\x00\x02\x00\x00\x00\x01') 

세 번째 위치를 들면 :

>>> a 
bytearray(b'\x00\x00\x00\x01') 
>>> b 
bytearray(b'\x00\x00\x00\x02') 
>>> a[2:2] = b 
>>> a 
bytearray(b'\x00\x00\x00\x00\x00\x02\x00\x01') 

주,이, .insert 일치하지 않는 시퀀스, .insert삽입 전체 개체 때문에 i 번째 요소로는입니다. 그래서, 목록과 다음의 간단한 예를 고려해 : 당신이 정말로 원하는 무엇

>>> y = ['a','b'] 
>>> x.insert(0, y) 
>>> 
>>> x 
[['a', 'b'], 1, 2, 3] 

했다 : 만 충족 정수를 허용 된 ByteArray 있도록

>>> x 
[1, 2, 3] 
>>> y 
['a', 'b'] 
>>> x[0:0] = y 
>>> x 
['a', 'b', 1, 2, 3] 
+0

이 방법이 효과적이지만 삽입이 실패한 이유를 알고 있습니까? – Russell

+1

@Russell 왜냐하면'.insert'는 객체, 즉 전체 bytearray *를 i 번째 요소로 삽입하려하기 때문입니다. 하지만 그건 당신이 원하는 것이 아니며 bytearrays는 바이트 단위의 객체가 아닌 * 바이트 만 포함 할 수 있습니다. 이것을 생각 해보자.'x = [1,2,3]; y = [ 'a', 'b']; x.insert (0, y)'는 x == [[ 'a', 'b'], 1, 2, 3]' –

0
>>> a = bytearray(struct.pack(">i", 1)) 
>>> b = bytearray(struct.pack(">i", 2)) 
>>> a = b + a 
>>> a 
bytearray(b'\x00\x00\x00\x02\x00\x00\x00\x01') 
+0

예 ...하지만 실제로 필요합니다. 연결이 작동하지 않을 수도있는 0이 아닌 색인에서 nsert 가끔 발생합니다. – Russell

0

Bytearray는 단일 바이트 (정수)의 가변 순서입니다 값 제한 0 < = x < = 255) :

>>> a = bytearray(struct.pack(">i", 1)) 
>>> b = bytearray(struct.pack(">i", 2)) 
>>> a.insert(0,b) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
TypeError: an integer is required 

>>> a=b+a 
>>> a 
bytearray(b'\x00\x00\x00\x02\x00\x00\x00\x01') 

>>>a[:2]=b 
>>> a 
bytearray(b'\x00\x00\x00\x02\x00\x01') 
관련 문제