python struct模块和ctypes模块

CharConvert.py

#float 转 16进制(hex)
import struct

	def float_to_hex(f):
	 return hex(struct.unpack('<I', struct.pack('<f', f))[0])  ******************/
一、python的struct模块/二、字节顺序大小对齐方式
函数returnexplain
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_intintint
c_floatfloatfloat
c_bytecharint
c_doubledoublefloat
c_charchar单字符字节对象

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个元素。

在这里插入图片描述

参考:
https://blog.csdn.net/kaka_yidian/article/details/16117487
https://blog.csdn.net/qq_30638831/article/details/80421019
https://docs.python.org/3/library/struct.html#format-characters
https://docs.python.org/zh-cn/3.8/library/ctypes.html#pointers

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值