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)占用多少字节的内存,注意对齐方式

三、测试样例

python 字节流和字符串转换 python 字节流 读取_字符串


# 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 类型。

python 字节流和字符串转换 python 字节流 读取_字节流_02

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

python 字节流和字符串转换 python 字节流 读取_字符串_03