[파이썬] 바이트 문자열을 바이트배열(byte array)로 변경
- 프로그래밍/파이썬
- 2021. 8. 11. 23:03
반응형
바이트 문자열을 그대로 바이트배열로 변경하려면?
예를들어 '020b16011710' 문자열이 있다고 해보자.
이걸 \x02\x0b\x10\x01... 이렇게 바꾸고 싶은게 아니라 (hex(16)=\x10), 그대로 \x02\x0b\x16... 로 변경해 무언가 바이트 연산을 하고싶을 때가 있다.
020b16011710 -> \x02\x0b\x10\x01\x11\xa (X)
020b16011710 -> \x02\x0b\x16\x01\x17\x10 (O)
바이트 문자열을 bytearray로 변경한 후 연산 작업 수행하기
그러기 위해선 두글자씩 띄어준 후(이게 한바이트가 되겠지) 이걸 bytearray로 변경해주면 된다. 먼저 for문과 join을 사용해 두글자씩 띄어준다. 그럼 '02 0b 16 01 17 10'의 형태가 된다.
>>> data = b'020b16011710'
>>> arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
>>> arr_data
'02 0b 16 01 17 10'
이걸 bytearray.fromhex() 처리를 해주면 b'\x02\x0b\x16\x01\x17\x10' 가 나온다.
>>> b_arr = bytearray.fromhex(arr_data)
>>> b_arr
bytearray(b'\x02\x0b\x16\x01\x17\x10')
그리고나서 원하는 작업을 처리하면 되는데, 예를들어 0x64와 xor을 수행해주는 코드는 아래와 같다.
data = b'020b16011710'
key = 0x64
arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
b_arr = bytearray.fromhex(arr_data)
for x in b_arr:
re = x^key
print(hex(re),chr(re))
보통 data가 상당히 클테니까, 아래는 입출력 버전이다!
data = open("C:\\Users\\leefo\\Desktop\\en_data.txt","rt").read()
key = 0x64
arr_data = ' '.join([data[x:x+2] for x in range(0,len(data),2)])
b_arr = bytearray.fromhex(arr_data)
re = ''
for x in b_arr:
tmp = x^key
re += chr(tmp)
f = open("C:\\Users\\leefo\\Desktop\\de_data.txt","w")
f.write(re)
f.close()
'프로그래밍 > 파이썬' 카테고리의 다른 글
[파이썬] 문자열 두 글자씩 띄우기 (0) | 2021.08.08 |
---|---|
[파이썬] zip으로 반복문에 리스트 여러개 같이 돌리기 (0) | 2020.06.19 |
[파이썬] collections 모듈, 리스트 요소별 개수 쉽게 구하기 (2) | 2020.06.18 |
[파이썬] pandas, csv 특정 열 값을 리스트로 변경하기 (2) | 2020.06.15 |
[파이썬] pandas로 csv에서 특정 값을 가진 행 찾기 (0) | 2020.06.14 |