struct.unpack을 사용하여 모든 C 구조체 필드와 그 값 (정수 및 문자열)의 덤프로 만든 이진 파일을 읽습니다. 그런 다음 압축을 푼 튜플을 사용하여 나중에 텍스트 파일 출력에 기록되는 필드 및 해당 값의 중간 사전 표현을 만듭니다.Python struct.unpack - 이진 문자열 리터럴을 아스키 텍스트로 파일 변환하기
텍스트 파일 출력 디스플레이 아래 문자열 : 프로그램이 이전이 잘 작동하는데 사용 파이썬 2.6에 기입 된
ID = b'000194901137\x00\x00\x00\x00'
timestampGMT = 1489215906
timezoneDiff = -5
timestampPackage = 1489215902
version = 293
type = b'FULL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
. 텍스트 파일에 쓰는 동안 우리는 원치 않는 진수 문자를 제거하려면 아래의 람다 식을 사용했다 : 파이썬 3.5로 이동
filtered_string = filter(lambda x: x in string.printable, line)
지금 필터를 반환하기 때문에, 람다 표현식이 더 이상 지원되지 않는 문자열로 쉽게 변환 할 수 없습니다.
이진 문자열 리터럴을 ASCII 문자로 변환하는 Python 방식은 무엇입니까 (후행 NUL '\ x00'없음). 따라서 일반 문자열 값으로 작성됩니다.
또한 각 파일에 대해 처리 할 항목이 여러 천개 (여러 파일이 있음)이므로 현재 상황에서 가능한 최상의 솔루션을 찾고 있습니다.
읽기 것은 당신이 상대하고있는 널링인가 - 예 : 것'type.rstrip (B ' \ x00 ')'작업 이냐 아니면 인쇄 가능한 체크가 필요한가 ... 나중에'바이트 '가 아닌'str'을 원한다면 알 수 없으므로' '.join (ch.isprintable() 인 경우 text.decode ('ascii ')의 ch)'내 생각 엔 ... –
유일한 NULL입니다. 전체 문자열을 인쇄하려고 시도하기 때문에 후행 NULL도 인쇄합니다. rstrip()을 시도했지만 캐리지 리턴 문자도 제거합니다. – prohit99
위에서 썼던대로 rstrip으로 스트립하고 싶은 것을 건네 주면됩니다 :'type.rstrip (b '\ x00')' –