socket编程中,由于字节是程序最基本的数据单元,将数据通过socket进行传输时,需要将其转化为字节流,将大于一个字节的数据类型的数据转化为二进制数据时,还要考虑到大小端的问题,那么在Python中如何进行大小端的处理以及如何将数据转化为一串二进制的数据的呢?Python的struct模块局可以完成相应的功能。
ss = "Hello"
str = struct.pack("<iq5sd",8,6,b"Hello",8.0)
print(str)
[int_value,int64_value,str_value,double_value] = struct.unpack("<iq5sd",str)
print(int_value,int64_value,str_value,double_value)
>表示小端,>表示大端,!表示网络字节序
将数值类型和所占字节数映射之后,进行将数值转化为字节流和将字节流转化为相应数据类型的数值。
import numpy
import struct
_UNPACK_TYPES = {
'int8_t': ['b', 1, numpy.int8],
'uint8_t': ['B', 1, numpy.uint8],
'int16_t': ['h', 2, numpy.int16],
'uint16_t': ['H', 2, numpy.uint16],
'int32_t': ['i', 4, numpy.int32],
'uint32_t': ['I', 4, numpy.uint32],
'int64_t': ['q', 8, numpy.int64],
'uint64_t': ['Q', 8, numpy.uint64],
'float': ['f', 4, numpy.float32],
'double': ['d', 8, numpy.float64],
'bool': ['?', 1, numpy.int8],
'char': ['c', 1, numpy.int8]
}
type = _UNPACK_TYPES['int32_t']
str = struct.pack('<'+type[0]+"q5sd",8,6,b"Hello",8.0)
print(str)
int_value = struct.unpack('<'+type[0], str[0:4])
print(int_value)