본문 바로가기
Programming/python

[python] 연속된 8Bit Bytes 를 float 등의 타입으로 바꾸는 방법. Struct module

by 단창 2012. 6. 23.

서로 다른 컴퓨터(언어, 시스템) 끼리 소켓통신을 할때 데이터 타입의 보존및 원활한 통신을 위해 

1 byte array를 서로 주고 받으면서 통신한다. 


matlab 같은 경우는 typecast(data,'uint8') , typecast(data,'single') 이런식으로 ,

c같은 경우엔 byte array를 원하는 변수타입에 넣기만 하면 알아서 casting되는 듯 한데

Python은 어떻게 할까? 


바로 struct 모듈을 이용한다. 


>>> import struct
>>> struct.pack('f', 3.141592654)
'\xdb\x0fI@'
>>> struct.unpack('f', '\xdb\x0fI@')
(3.1415927410125732,)
>>> struct.pack('4f', 1.0, 2.0, 3.0, 4.0)
'\x00\x00\x80?\x00\x00\x00@\x00\x00@@\x00\x00\x80@'


(어디서 긁어왔음..-_-)


너무 간단하다! pack('f' 로 float ~ (4byte) 로 팩 하고, unpack('f' ~ 로 언팩해서 쓴다!


통신할때 패킷은 byte단위로 끊어서 넘기는것 항상 잊지말자. 


% 주의해야 할 점 : 

unpack을 하였을때 return값은 튜플이다! 



반응형