2011-01-18 2 views
1

여기 내 코드 (py3.1)입니다. 왜 내가 문자열을 못 잡았을까요?struct.unpack 반환하지 문자열

return struct.unpack("{}s".format(chars),self.get_bin(chars))[0].decode('ASCII') 

을하지만 unpack() 무시이 자체를 할 이유를 설명하지 않습니다

+3

'bytes'를'str'으로 바꾸고 싶다면 잘못하고 있습니다 (tm). 'struct'는 tightly-laid-out 바이너리 (!) 데이터를 다루기위한 것입니다. – delnan

+0

그게 내가 다루고있는거야. MESH 등은 이진 데이터 중 레이블에 불과합니다. – Artfunkel

답변

2

. 당신이 보여주는 것은 오류를 일으켰을 것입니다. 또한 사람들이 추측 할 필요가 없도록 코드 스 니펫에 모든 정보가 포함되도록하십시오.

>>> 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 
>>> 

설명서가 말한대로

"푸는는 결과 바이트 객체 ..."

+0

제가 게시했습니다 내 코드와 작동하지, 고마워. 'chars'는 "guessed"와 같은 문자열 자체가 아니라 원하는 문자열의 문자 수입니다. (당신이 질문에 대답 한 것처럼 보입니다. 그래서 당신을 용서합니다.) – Artfunkel

+0

chars는 정수에 적절한 이름이 아니며, 형식 ('{}')은 아무런 단서도 제공하지 않습니다. 누군가가하고있는 것을 재현 할 수 있도록 전체 코드 ('self.get_bin (chars)'???)를 보여주지 않았다. 실제로, 당신이 의미하는 것을 보여주기 위해 보여줄 필요가있는 것은'struct.unpack ("4s", "MESH")' –

0

이 작동합니다. 대답이 나올 때까지 질문을 공개하겠습니다.

편집 : 제이슨의 개선 :

return self.get_bin(chars).decode('ASCII') 

정말 구조체의 조롱을 만든다 ... 당신이 코드가 실행 한 일을 실제로 있는지 확인하는 경우 질문을 할 때 도움이

+0

나는 혼란 스럽다. 왜'struct'가 문자열을 해독 할 것으로 기대 하는가? 그리고 만약'struct'가 이것을 할 것으로 예상 되더라도'struct.unpack'은 문자열이 ASCII인지 UTF8인지 아니면 다른 형태의 유니 코드인지 자동으로 추측 할 수 있습니까? –

+0

'10s> char [10]'과'10w> wchar_t [10]'? 나는 실제로 문자열이 있다고 주장하기 때문에 실제로 방법이 있다고 가정합니다. – Artfunkel

+1

"make a mockery": 당연히 그게 전부라면,'struct'가 필요하지 않습니다 ...'struct'는 "<4s2H2Bd"와 같은 형식을 필요로하는 구조체입니다 –

0

압축 풀기는 튜플,이 경우 길이가 1 인 튜플을 반환합니다.

당신이 무슨 말을

[0]

를 추가하고 당신이 기대하는 것을 제공해야합니다.

관련 문제