haimiandashu 发表于 2023-7-20 12:15

使用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)

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)
页: [1] 2
查看完整版本: 使用python将十六进制的数据转换成浮点数、整数......