는 나도 몰라,하지만이 작동하는 것 같다 : 테스트 데이터 b'\x12\x34\xe0'
를 들어
import itertools
def convert_packed_decimal(byte_stream):
digit_list = list(itertools.chain.from_iterable([[(b & 0xF0) >> 4, b & 0xF] for b in byte_stream]))
num_digits = digit_list.index(0xE)
return sum([digit_list[i] * 10 ** (num_digits - i - 1) for i in range(num_digits)])
if __name__ == '__main__':
print(convert_packed_decimal(b'\x12\x34\xe0'))
print(convert_packed_decimal(b'\x90\x21\x0e'))
, 함수의 첫 번째 행은 e에 대한 목록 이해력을 사용합니다. 중첩리스트
[[1,2],[3,4],[14,0]]
에 xtract 개별 숫자 다음 list(itertools.chain.from_iterable(...
간단한리스트에 평평.
[1,2,3,4,14,0]
번째 행 (이 경우, 4) 우리 프로세스의 자릿수를주는 0xE
(14 진수) 터미네이터의 인덱스를 찾는다.
세번째 줄
[1 * 1000, 2 * 100, 3 * 10, 4 * 1]
리스트에서의 위치에 대응하는 (10)의 힘에 의해 그 승산 각 숫자를 처리하는 지능형리스트를 사용하고 sum(...
그들을 가산.
그래서 1234는'\ x12 \ x34'이고 12345는'\ x12 \ x34 \ x5e'가 될 것입니까? –
예. 1234는 \ x12 \ x34 \ xe0입니다. BTW, nybbles를 구문 분석하는 코드를 작성했지만 파이썬적인 것을 원합니다. – ZevGriner