CharConvert.py
#float 转 16进制(hex)
import struct
def float_to_hex(f):
return hex(struct.unpack('<I', struct.pack('<f', f))[0]) ******************一/二
一、python的struct模块/二、字节顺序大小对齐方式
函数 | return | explain |
pack(fmt,v1,v2…) | string | 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. |
pack_into(fmt,buffer,offset,v1,v2…) | None | 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块) |
unpack(fmt,v1,v2……) | tuple | 按照给定的格式(fmt)解析字节流,并返回解析结果 |
pack_from(fmt,buffer,offset) | tuple | 按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果 |
calcsize(fmt) | size of fmt | 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式 |
三、测试样例
# float 转 16进制(hex)
from ctypes import *
def float_convert_hex(s): #将字符串型的数字转换成10进制数
i = int(s, 16) # convert from hex to a Python int(从 hex 转换为 python int)int() 函数用于将一个字符串或数字转换为整型。
cp = pointer(c_int(i)) # make this into a c integer(把这个变成 c 整数)
fp = cast(cp, POINTER(c_float)) # cast the int pointer to a float pointer(将 int 指针转换为浮点指针)
return fp.contents.value # dereference the pointer, get the float(解引用指针,得到浮点数)
四、ctypes的指针
c_init(i) ctypes 定义了一些和C兼容的基本数据类型:
ctypes类型 | C类型 | python类型 |
c_int | int | int |
c_float | float | float |
c_byte | char | int |
c_double | double | float |
c_char | char | 单字符字节对象 |
pointer() 指针可以通过 ctypes 中的 pointer() 函数进行创建:pointer() 函数不只是创建了一个指针实例,它首先创建了一个指针 类型 。这是通过调用 POINTER() 函数实现的,它接收 ctypes 类型为参数,返回一个新的类型:
cast(cp,POINTER(c_float)) cast() 函数可以将一个指针实例强制转换为另一种 ctypes 类型。
五、bytes.fromhex()
# 16进制(hex)转 float
def hex_to_float(f):
return (struct.unpack('!f', bytes.fromhex(f))[0])
bytes bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。
b=bytes.fromhex(a) hex字符串向bytes转换
c=b.hex() bytes向hex字符串转换
source类型 | 返回 |
整数 | 长度为 source 的初始化数组; |
字符串 | 按照指定的 encoding 将字符串转换为字节序列; |
可迭代类型 | 元素必须为[0 ,255] 中的整数; |
与 buffer 接口一致的对象 | 此对象也可以被用于初始化 bytearray。 |
没有输入任何参数 | 默认就是初始化数组为0个元素。 |