【python】 无符号int、float、double与16进制字符串的互相转换 有符号int与16进制字符串的相互转换

本文介绍Python中无符号及有符号整数、浮点数与双精度浮点数与16进制字符串之间的转换方法。通过具体示例展示了如何使用Python标准库struct进行数据类型转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、无符号int、float、double与16进制字符串的互相转换

import struct


def intToHex(num):  # int转16进制
    return hex(num)[2:].upper()

def hexToInt(hexString):  # 16进制转int
    return int(hexString, 16)

def floatToHex(floatValue):  # float转16进制
    return struct.pack('>f', floatValue).hex().upper()

def hexToFloat(hexString):  # 16进制转float
    return struct.unpack('>f', bytes.fromhex(hexString))[0]

def doubleToHex(doubleValue):  # double转16进制
    return struct.pack('>d', doubleValue).hex().upper()

def hexToDouble(hexString):  # 16进制转double
    return struct.unpack('>d', bytes.fromhex(hexString))[0]

if __name__ == '__main__':
    print(intToHex(1000), hexToInt("3E8"))
    print(floatToHex(1.0), hexToFloat("3F800000"))
    print(doubleToHex(1.00), hexToDouble("3FF0000000000000"))

结果:

二、有符号int与16进制字符串的相互转换

bytesNumber = 6  # 传入几个字节

# 传入bytesNumber个字节十六进制字符串,返回int类型
def str_to_signed_int_bytes(data: str):
    int_data = int(data, 16)
    if int_data >= (2**(bytesNumber*8)-2)/2:
        int_num = int_data - (2**(bytesNumber*8)-2)
    else:
        int_num = int_data
    return int_num

# 传入int类型字符串,返回bytesNumber个字节带符号十六进制数据字符串
def signed_int_to_str_bytes(int_num: int):
    if int_num < 0:
        int_temp = (2**(bytesNumber*8)-2) + int_num
    else:
        int_temp = int_num
    str_hex = '{:04X}'.format(int_temp)
    return str_hex.zfill(bytesNumber*2)

if __name__ == '__main__':
    print(str_to_signed_int_bytes('FFFFFF587239'))
    print(signed_int_to_str_bytes(-10980805))

测试结果:

另一种写法:

def Sign_IntTo2ByteString(num):  # 有符号,int转2字节字符串
    return bytes.hex((num).to_bytes(2,'big',signed=True)).zfill(4)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhichao_97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值