吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 993|回复: 15
收起左侧

[学习记录] 使用python将十六进制的数据转换成浮点数、整数......

[复制链接]
haimiandashu 发表于 2023-7-20 12:15
因为工作需要,在处理数据中需要对报文需要解析,所系就要把十六进制的数据进行转换,可以打包成exe方便使用
[Python] 纯文本查看 复制代码
#!/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)[0]

    # 双精度浮点数
    elif len(hex_bytes) == 8:
        data['double'] = struct.unpack('d', hex_bytes)[0]

    # 整数(32位或64位)
    if len(hex_bytes) == 4:
        data['int32'] = struct.unpack('i', hex_bytes)[0]
    elif len(hex_bytes) == 8:
        data['int64'] = struct.unpack('q', hex_bytes)[0]

    # 转换为二进制字符串
    binary_str = bin(int.from_bytes(hex_bytes, byteorder='big'))[2:]
    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)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
hrh123 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chenzhigang 发表于 2023-7-20 16:45
你可能不是win 用户  win上面有计算器  计算器上面有个选项叫程序员模式
想喝西柚养乐多 发表于 2023-7-20 16:54
 楼主| haimiandashu 发表于 2023-7-21 08:38
chenzhigang 发表于 2023-7-20 16:45
你可能不是win 用户  win上面有计算器  计算器上面有个选项叫程序员模式

您可能不是程序员,数据类型分好多,高低位变换。不能拿自己的见识来评判哦
dyb127 发表于 2023-7-21 08:44
最基础的部分。学习学习!
uouobb 发表于 2023-7-21 09:02
本帖最后由 uouobb 于 2023-7-21 09:28 编辑

大师作品,明明能直接用hex却整这么一大通,你可以上清华去了。当年清华研究生考题,用超静定方法去解静力学问题。
x = input("请输入十六进制数据:")
y = "0x" + str(x)
decimal = eval(y)
print(decimal)
 楼主| haimiandashu 发表于 2023-7-21 09:22
uouobb 发表于 2023-7-21 09:02
大师作品,明明能直接用hex却整这么一大通,你可以上清华去了。当年清华研究生考题,用超静定方法去解静力 ...

不懂别乱说,会暴露你的无知
uouobb 发表于 2023-7-21 09:31
haimiandashu 发表于 2023-7-21 09:22
不懂别乱说,会暴露你的无知

x = input("请输入十六进制数据:")
y = "0x" + str(x)
decimal = eval(y)
print(decimal)
 楼主| haimiandashu 发表于 2023-7-21 09:40
uouobb 发表于 2023-7-21 09:31
x = input("请输入十六进制数据:")
y = "0x" + str(x)
decimal = eval(y)

去学习一下数据类型吧哥们,看一下浮点数,看下32位和16位数据,高低位方面的知识,对自己没害处。不用在我帖子下面杠,你说的都对
uouobb 发表于 2023-7-21 11:09
haimiandashu 发表于 2023-7-21 09:40
去学习一下数据类型吧哥们,看一下浮点数,看下32位和16位数据,高低位方面的知识,对自己没害处。不用在 ...

float.fromhex(hex_data)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表