PythoN实现有符号十进制与十六进制之间转换

在线运行环境

===== 1. 有符号十进制转十六进制 =====

===== 2. 随机负十进制数及对应16位十六进制 =====

===== 3. 有符号十六进制转十进制 =====

bash 复制代码
import random
from typing import Tuple  # 兼容Python 3.9以下版本的类型注解

def signed_dec_to_hex(decimal_num: int) -> Tuple[str, str]:
    """
    将有符号十进制数转换为 两字节(16位) 和 四字节(32位) 的十六进制字符串(大端序,无空格)
    :param decimal_num: 有符号十进制整数
    :return: (两字节十六进制字符串, 四字节十六进制字符串)
    """
    try:
        # 转换为两字节(16位)有符号数的十六进制,大端序,补零到4位
        two_byte_hex = int.to_bytes(decimal_num, length=2, byteorder="big", signed=True).hex()
        # 转换为四字节(32位)有符号数的十六进制,大端序,补零到8位
        four_byte_hex = int.to_bytes(decimal_num, length=4, byteorder="big", signed=True).hex()
        return two_byte_hex, four_byte_hex
    except OverflowError:
        raise ValueError(f"数值 {decimal_num} 超出对应字节范围:\n"
                         f"两字节(16位)范围:[-32768, 32767]\n"
                         f"四字节(32位)范围:[-2147483648, 2147483647]")

def generate_random_negative_dec() -> Tuple[int, str]:
    """
    生成随机负十进制数,并转换为对应的16位(两字节)十六进制字符串
    :return: (随机负十进制数, 对应的16位十六进制字符串)
    """
    # 16位有符号数的负数范围:-32768 ~ -1
    min_neg = -32768
    max_neg = -1
    random_neg = random.randint(min_neg, max_neg)
    # 转换为16位十六进制
    hex_str = int.to_bytes(random_neg, length=2, byteorder="big", signed=True).hex()
    return random_neg, hex_str

def signed_hex_to_dec(hex_str: str) -> Tuple[int, int]:
    """
    将有符号十六进制字符串转换为 两字节(16位) 和 四字节(32位) 对应的十进制值(大端序)
    :param hex_str: 十六进制字符串(支持带/不带0x、大小写、空格,如ffd5、0xFF D5)
    :return: (两字节对应十进制, 四字节对应十进制)
    """
    # 预处理:去除空格、去除0x前缀、转小写
    hex_clean = hex_str.replace(" ", "").replace("0x", "").lower()
    
    try:
        # 转换为字节流
        hex_bytes = bytes.fromhex(hex_clean)
    except ValueError:
        raise ValueError(f"输入的十六进制字符串 {hex_str} 格式无效")
    
    # 1. 转换为两字节(16位)有符号十进制(不足补零,超出截断后4位)
    two_byte_bytes = hex_bytes[-2:] if len(hex_bytes) >= 2 else hex_bytes.zfill(2)
    two_byte_dec = int.from_bytes(two_byte_bytes, byteorder="big", signed=True)
    
    # 2. 转换为四字节(32位)有符号十进制(不足补零,超出截断后8位)
    four_byte_bytes = hex_bytes[-4:] if len(hex_bytes) >= 4 else hex_bytes.zfill(4)
    four_byte_dec = int.from_bytes(four_byte_bytes, byteorder="big", signed=True)
    
    return two_byte_dec, four_byte_dec

# ------------------- 测试示例 -------------------
if __name__ == "__main__":
    print("===== 1. 有符号十进制转十六进制 =====")
    test_num = -23578  # 可修改为任意有符号十进制数
    two_hex, four_hex = signed_dec_to_hex(test_num)
    print(f"指定有符号十进制数:{test_num}")
    print(f"对应两字节(16位)十六进制:{two_hex}")
    print(f"对应四字节(32位)十六进制:{four_hex}\n")

    print("===== 2. 随机负十进制数及对应16位十六进制 =====")
    random_num, random_hex = generate_random_negative_dec()
    print(f"随机负十进制数:{random_num}")
    print(f"对应16位(两字节)十六进制:{random_hex}\n")

    print("===== 3. 有符号十六进制转十进制 =====")
    test_hex = "ffd5"  # 可修改为任意两字节/四字节十六进制(如ffd5、ffffffd5、0xFF D5)
    two_dec, four_dec = signed_hex_to_dec(test_hex)
    print(f"指定有符号十六进制数:{test_hex}")
    print(f"对应两字节(16位)十进制:{two_dec}")
    print(f"对应四字节(32位)十进制:{four_dec}")
相关推荐
笔触狂放32 分钟前
第3章 抓取静态网页数据
爬虫·python
海兰32 分钟前
【 Python 量化交易】开篇
开发语言·python·信息可视化·量化交易
pt104344 分钟前
网络自动化Python课程:Netconf与Restconf及Cisco自动化配置实验
网络·python·自动化
slacker-kian1 小时前
[笔记]-什么是相似性搜索?
python·ai·向量·相似性搜索·点积·l2 距离·余弦相似度和距离
阿童木写作1 小时前
跨境电商图片翻译工具,批量翻译视频字幕还免费
python·音视频
sukioe1 小时前
城智连响:基于 LangGraph 与四库分层架构的城市公共设施智能报修与派单系统
人工智能·python·ai·架构·langchain
我的xiaodoujiao1 小时前
Django 基础知识详细图文教程 4-Django 视图定义与使用
开发语言·数据库·后端·测试工具·django·sqlite
l1t1 小时前
DeepSeek总结的DuckDB在 CI 中为 release 和 glibc CLI 构建启用 LTO - #24225
开发语言·数据库·ci/cd·duckdb
whitelbwwww1 小时前
c++运行RKNN
开发语言·c++
2601_962070231 小时前
差异基因富集分析(R语言——GO&KEGG&GSEA)
开发语言·golang·r语言