여기 내 코드 (py3.1)입니다. 왜 내가 문자열을 못 잡았을까요?struct.unpack 반환하지 문자열
return struct.unpack("{}s".format(chars),self.get_bin(chars))[0].decode('ASCII')
을하지만 unpack()
무시이 자체를 할 이유를 설명하지 않습니다
여기 내 코드 (py3.1)입니다. 왜 내가 문자열을 못 잡았을까요?struct.unpack 반환하지 문자열
return struct.unpack("{}s".format(chars),self.get_bin(chars))[0].decode('ASCII')
을하지만 unpack()
무시이 자체를 할 이유를 설명하지 않습니다
. 당신이 보여주는 것은 오류를 일으켰을 것입니다. 또한 사람들이 추측 할 필요가 없도록 코드 스 니펫에 모든 정보가 포함되도록하십시오.
>>> chars = "MESH" # guess
>>> binchars = b"MESH" # guess
>>> struct_fmt = "{}s".format(chars) # what you showed
>>> struct_fmt
'MESHs' ############### won't work
>>> import struct
>>> struct.unpack(struct_fmt, binchars)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: bad char in struct format ############ didn't work
>>> struct_fmt2 = "{}s".format(len(chars)) # what you probably did use
>>> struct_fmt2
'4s' #### looks much better
>>> struct.unpack(struct_fmt2, binchars)
(b'MESH',) ### did work
>>>
설명서가 말한대로
"푸는는 결과 바이트 객체 ..."제가 게시했습니다 내 코드와 작동하지, 고마워. 'chars'는 "guessed"와 같은 문자열 자체가 아니라 원하는 문자열의 문자 수입니다. (당신이 질문에 대답 한 것처럼 보입니다. 그래서 당신을 용서합니다.) – Artfunkel
chars는 정수에 적절한 이름이 아니며, 형식 ('{}')은 아무런 단서도 제공하지 않습니다. 누군가가하고있는 것을 재현 할 수 있도록 전체 코드 ('self.get_bin (chars)'???)를 보여주지 않았다. 실제로, 당신이 의미하는 것을 보여주기 위해 보여줄 필요가있는 것은'struct.unpack ("4s", "MESH")' –
이 작동합니다. 대답이 나올 때까지 질문을 공개하겠습니다.
편집 : 제이슨의 개선 :
return self.get_bin(chars).decode('ASCII')
정말 구조체의 조롱을 만든다 ... 당신이 코드가 실행 한 일을 실제로 있는지 확인하는 경우 질문을 할 때 도움이
나는 혼란 스럽다. 왜'struct'가 문자열을 해독 할 것으로 기대 하는가? 그리고 만약'struct'가 이것을 할 것으로 예상 되더라도'struct.unpack'은 문자열이 ASCII인지 UTF8인지 아니면 다른 형태의 유니 코드인지 자동으로 추측 할 수 있습니까? –
'10s> char [10]'과'10w> wchar_t [10]'? 나는 실제로 문자열이 있다고 주장하기 때문에 실제로 방법이 있다고 가정합니다. – Artfunkel
"make a mockery": 당연히 그게 전부라면,'struct'가 필요하지 않습니다 ...'struct'는 "<4s2H2Bd"와 같은 형식을 필요로하는 구조체입니다 –
압축 풀기는 튜플,이 경우 길이가 1 인 튜플을 반환합니다.
당신이 무슨 말을[0]
를 추가하고 당신이 기대하는 것을 제공해야합니다.
'bytes'를'str'으로 바꾸고 싶다면 잘못하고 있습니다 (tm). 'struct'는 tightly-laid-out 바이너리 (!) 데이터를 다루기위한 것입니다. – delnan
그게 내가 다루고있는거야. MESH 등은 이진 데이터 중 레이블에 불과합니다. – Artfunkel