float 번호를 길게 변환하려고 시도하고 있습니다. 소켓을 통해 전송하는 방법을 알고 싶습니다. 내가 deserialize 할 수없는 번호를 테스트하기 위해 FloatToInt 메소드를 만들었습니다.
길이로 부동 소수점에서 변환이 잘 작동하지만 내가 다시 떠 긴에서 변환 할 때 그것은 "비 16 진수 발견"부동 소수점 형식 오류 : 16 진수가 아닌 숫자가 표시됨
def FloatToInt(num):
num = 22083.60066068796
print "FloatToInt:float:%.10f" %num
packed = struct.pack('!f', num)
print 'FloatToInt:Packed: %s' % repr(packed)
integers = [ord(c) for c in packed]
print 'FloatToInt:Integers: %s' % repr(integers)
val = int(0)
for i in integers:
val |= i
val = val << 8
return val
def IntToFloat(num):
#val = struct.unpack('!f', num.decode('hex'))[0]
#return val
intArr = []
while num > 0:
val = num & 0xFF
if val > 0:
intArr.append(int(val))
num = num >> 8
print 'IntToFloat:Integers: %s' % repr(intArr)
chars = [chr(c) for c in intArr]
str = ""
for ch in chars:
str += ch
print 'IntToFloat:Hex chars: %s' % repr(str)
ret = struct.unpack('!f', str.decode('hex'))[0]
return ret
이 출력 발생 :
FloatToInt:float:22083.6006606880
FloatToInt:Packed: 'F\xac\x874'
FloatToInt:Integers: [70, 172, 135, 52]
IntToFloat:Integers: [52, 135, 172, 70]
IntToFloat:Hex chars: '4\x87\xacF'
Traceback (most recent call last):
........
TypeError: Non-hexadecimal digit found
그래서 str.decode ('hex')는 FloatToInt 메소드의 값을 패킹 할 때와 같은 정수 값을 갖지만 오류를 던집니다.
실종 된 내용이 있습니까?
감사합니다.
"16 진수"코덱의 기능에 대해 알고 있습니까? –
인코딩에 등록 된 'hex'(2 바이트) 코덱을 사용하여 obj를 디코딩합니까?! – Lucian
하지만 그게 무슨 뜻인지 알겠습니까? –