2013-08-02 2 views
1

제목이 약간 잘못되었습니다. 기본적으로 여러 가지 형식의 거대한 목록에 수많은 숫자가 있습니다. 나는 그 값과 타입을 전달하고 그것들을 풀어서 HEX 문자열로 변환 할 것으로 예상된다.튜블을 알 수없는 형식의 16 진수로 변환

내 최신 시도는 다음과 같습니다 realVal이 수의 실제 값 인 16 진수 있어야하는데, 내 나중에 코드에서 사용되는

realVal = '0x%08x' % struct.unpack(evalType, (rawVal)) 

. evalType은 숫자 rawVal의 코드 문자 유형이며 rawVal은 바이너리 파일에서 직접 추출 된 원시 값입니다. evalType은 사전을 보면 알 수 있습니다. 그러나 값이 부동 소수점 일 때, 중단됩니다. 그러나 처음 100K 경우에는 값이 정수 인 곳에서 실행됩니다. 오류에 따라,

realVal = '0x%08x' % int (struct.unpack(evalType, (rawVal))) 

을하지만, 분명히 struct.unpack (evalType는, (rawVal가))는 touple이기 때문에 그것은 작동하지 않습니다

그래서 내가 수행하여 첫 번째 정수로 값을 변환하려고 메시지. ,

realVal = struct.unpack(evalType, (rawVal)).hex() 

나는 값이 부동 알고 때

또한, 나는 진수로 부동 소수점으로 변환하는 것은 float.hex()에 의해 수행 될 수 있다는 것을 발견 그래서 if 문에 추가하고 나는 시도 그것은 깨지고 touples은 .hex() 함수를 가지고 있지 않다고 말한다.

이제 내가 touple로 작업하고 있다는 것을 알았습니다. 내부 값이 정수이고 float 일 때 왜 충돌하는지, 그리고 어떻게 고쳐야하는지 왜 잘 작동하는지 궁금합니다.

+0

일부 예제 입력과 예제 출력은 유용 할 것입니다 ... –

답변

0

아, 알아 냈습니다.

realVal = struct.unpack("<" + evalType, (rawVal))[0].hex()

IT는 touple 때문에, 그리고 내 전화 번호가 저장되는 최초의 인덱스입니다.

+0

약간 더 융통성이 있습니다 (압축을 풀 때 사용할 값이 여러 개인 경우 또는'.hex '를 지원하지 않지만 16 진수로 표현하려는 경우) :'{0 : 08x } '. 형식 (...)' –

1

일반적으로 struct.unpack (..)은 하나의 요소 만 반환하는 경우에도 (x,) 형식으로 반환되는 튜플을 반환합니다. 따라서 다음과 같이 zero 인덱스를 넣어야한다 : struct.unpack (..) [0].

+1

아, 그래, 나는 그걸 알아 냈습니다. 감사합니다. – CamelopardalisRex