使用python将十六进制的数据转换成浮点数、整数......
因为工作需要,在处理数据中需要对报文需要解析,所系就要把十六进制的数据进行转换,可以打包成exe方便使用#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :pythonproject
@file :十六进制数据转换.py
@IDE :PyCharm
@AuThor:海绵的烂笔头
@date :2023-07-20 11:54
'''
import struct
def hex_to_data(hex_str, endian='little'):
# 将十六进制字符串转换为bytes对象
hex_bytes = bytes.fromhex(hex_str)
# 根据字节序重新排序bytes对象
if endian == 'big':
hex_bytes = hex_bytes[::-1]
data = {}
# 浮点数
if len(hex_bytes) == 4:
data['float'] = struct.unpack('f', hex_bytes)
# 双精度浮点数
elif len(hex_bytes) == 8:
data['double'] = struct.unpack('d', hex_bytes)
# 整数(32位或64位)
if len(hex_bytes) == 4:
data['int32'] = struct.unpack('i', hex_bytes)
elif len(hex_bytes) == 8:
data['int64'] = struct.unpack('q', hex_bytes)
# 转换为二进制字符串
binary_str = bin(int.from_bytes(hex_bytes, byteorder='big'))
data['binary'] = binary_str
# 转换为十进制数值
decimal_value = int(hex_str, 16)
data['decimal'] = decimal_value
return data
if __name__ == "__main__":
hex_data = input("请输入十六进制数据:")
endian_choice = input("请选择字节序(输入 'little' 或 'big'):")
try:
result = hex_to_data(hex_data, endian=endian_choice)
print("转换结果:")
for key, value in result.items():
print(f"{key}: {value}")
except ValueError as e:
print("转换错误:", e)
你可能不是win 用户win上面有计算器计算器上面有个选项叫程序员模式 感谢分享 chenzhigang 发表于 2023-7-20 16:45
你可能不是win 用户win上面有计算器计算器上面有个选项叫程序员模式
您可能不是程序员,数据类型分好多,高低位变换。不能拿自己的见识来评判哦 最基础的部分。学习学习! 本帖最后由 uouobb 于 2023-7-21 09:28 编辑
大师作品,明明能直接用hex却整这么一大通,你可以上清华去了。当年清华研究生考题,用超静定方法去解静力学问题。
x = input("请输入十六进制数据:")
y = "0x" + str(x)
decimal = eval(y)
print(decimal) uouobb 发表于 2023-7-21 09:02
大师作品,明明能直接用hex却整这么一大通,你可以上清华去了。当年清华研究生考题,用超静定方法去解静力 ...
不懂别乱说,会暴露你的无知 haimiandashu 发表于 2023-7-21 09:22
不懂别乱说,会暴露你的无知
x = input("请输入十六进制数据:")
y = "0x" + str(x)
decimal = eval(y)
print(decimal) uouobb 发表于 2023-7-21 09:31
x = input("请输入十六进制数据:")
y = "0x" + str(x)
decimal = eval(y)
去学习一下数据类型吧哥们,看一下浮点数,看下32位和16位数据,高低位方面的知识,对自己没害处。不用在我帖子下面杠,你说的都对 haimiandashu 发表于 2023-7-21 09:40
去学习一下数据类型吧哥们,看一下浮点数,看下32位和16位数据,高低位方面的知识,对自己没害处。不用在 ...
float.fromhex(hex_data)
页:
[1]
2