【python】bin/dec/hex/bnr进制转换函数及fp32转十六进制

news2025/7/23 23:03:29

 

 我们的目标是┏ (゜ω゜)=☞芯片前端全栈工程师~喵!

前言

不知道为什么,给脚本专栏选的这个logo有种怪怪的感觉(⊙o⊙)…

为方便后续一些脚本工作,将常用的进制转换函数汇总。所有函数均为字符串输入输出,且不加0x、0b等关键字,以便后续灵活调用。基于这些字符串输入输出的函数,可以非常灵活的根据需求拼接更加复杂的行为:

TO->>>十进制二进制源码二进制补码十六进制
十进制 dec_to_bindec_to_bnrdec_to_hex
二进制源码bin_to_dec bin_to_bnrbin_to_hex
二进制补码bnr_to_decbnr_to_bin bnr_to_hex
十六进制hex_to_dechex_to_binhex_to_bnr 
FP32   float_to_hex

函数

dec_to_bin

十进制转二进制源码:

def dec_to_bin(i: str) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	return format(int(i),'b')#08b

测试:

print(dec_to_bin("10"))
print(dec_to_bin("-10"))

1010
-1010

dec_to_bnr

十进制转二进制补码,我参考了网上的代码,稍作修改:

def dec_to_bnr(i: int, lenth: int = 1) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	dec = int(i)
	digits = (len(bin(dec)) - 3 + 1) if dec < 0 else (len(bin(dec)) - 2)
	if digits >= lenth:
		lenth = digits
	pattern = f"{dec & int('0b' + '1' * lenth, 2):0{lenth}b}"
	return "".join(code for code in pattern)

测试:

print(dec_to_bnr("10"))
print(dec_to_bnr("-10"))

1010
10110

dec_to_hex

十进制转十六进制:

def dec_to_hex(i: str) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	if i.startswith("-"):
		i = re.sub("-", "", i)
		return "-" + str(hex(int(i)))[2:]
	else:
		return str(hex(int(i)))[2:]

测试:

print(dec_to_hex("10"))
print(dec_to_hex("-10"))

a
-a

bin_to_dec

 二进制转十进制:

def bin_to_dec(i: str) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	return str(int(str(i), 2))

测试:

print(bin_to_dec("0101"))
print(bin_to_dec("-0101"))

5
-5

bin_to_bnr

二进制源码转二进制补码:

def bin_to_bnr(i: str) -> str:
	return dec_to_bnr(bin_to_dec(i))

测试:

print(bin_to_bnr("1010"))
print(bin_to_bnr("-1010"))

1010
10110

bin_to_hex

二进制原码转十六进制:

def bin_to_hex(i: str) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	if i.startswith("-"):
		i = re.sub("-", "", i)
		return "-" + str(hex(int(i, 2)))[2:]
	else:
		return str(hex(int(i, 2)))[2:]

测试:

print(bin_to_hex("1010"))
print(bin_to_hex("-1010"))

a
-a

bnr_to_dec

二进制补码转十进制,也是在参考了网上的代码:

def bnr_to_dec(i: str) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	for num in i:
		if num not in ["0", "1"]:
			raise ValueError("Not bin str")
	if i.startswith("0"):
		dec = int(i, 2)
	else:
		dec = int(i[1:], 2) - 0x01
		dec = -(~dec & int("0b" + "1" * (len(i) - 1), 2))
	return str(dec)

测试:

print(bnr_to_dec("010011"))
print(bnr_to_dec("1010011"))

19
-45

bnr_to_bin

二进制补码转二进制原码:

def bnr_to_bin(i: str) -> str:
	return dec_to_bin(bnr_to_dec(i))

bnr_to_hex

二进制补码转十六进制,这个场景必然是要把补码还原为原本的数,再显示十六进制,否则直接用bin_to_hex就够了:

def bnr_to_hex(i: str) -> str:
	return dec_to_hex(bnr_to_dec(i))

测试:

print(bnr_to_hex("10100"))
print(bnr_to_hex("01001"))

-c
9

hex_to_dec

十六进制转十进制:

def hex_to_dec(i: str) -> str:
	if not isinstance(i, str):
		raise TypeError("Not str input")
	return str(int(i, 16))

测试:

print(hex_to_dec("a"))
print(hex_to_dec("-a"))

10
-10

hex_to_bin

十六进制转二进制:

def hex_to_bin(i: str) -> str:
	return dec_to_bin(hex_to_dec(i))

hex_to_bnr

十六进制转补码:

def hex_to_bnr(i: str) -> str:
	return dec_to_bnr(hex_to_dec(i))

float_to_hex

fp32(float)类型转十六进制,这个也是从网上学来的(感恩家人!):

import struct
def float_to_hex(i: str) -> str:
	f = float(i)
	h = hex(struct.unpack('<I', struct.pack('<f', f))[0])
	return str(h)[2:]

测试:

print(float_to_hex("17.5"))
print(float_to_hex("-17.5"))

418c0000
c18c0000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机硬件和软件

文章目录一 计算机硬件1&#xff09;主板2&#xff09;显示器3&#xff09;键盘4&#xff09;鼠标二 计算机软件&#xff08;一&#xff09;系统软件&#xff08;1&#xff09;操作系统&#xff08;2&#xff09;BIOS&#xff08;3&#xff09;设备驱动程序&#xff08;二&…

K-verse 小型活动来袭!

欢迎来到韩流狂欢节&#xff01; 我们的韩流活动以为期 2 周的 K-verse 小型活动拉开帷幕&#xff01; 在 The Sandbox 的众多合作伙伴中&#xff0c;K League、Anicube、Sandbox Network 和 Cube 娱乐都为此次活动打造了独特的体验。从 11 月 24 日开始&#xff0c;玩家总共可…

digitalLogic_逻辑门和基本公式

文章目录refs逻辑闸或逻辑门与或非门反相器和泡泡与非/或非/异或同或/是/蕴含/蕴含非逻辑函数的表示方法及相互转换逻辑表达式化简基本公式异或和同或的常用运算公式refs digital_logic同或和异或的关系_xuchaoxin1375的博客-CSDN博客_异或与同或的关系模2运算_模二除法和CRC循…

彩虹之眼文化集团整体方案设计

彩虹之眼文化集团开业成功必须克服的问题是&#xff1a;既要有轰动的社会效应&#xff0c;又要有实实在在的营业额。而要使两者兼备&#xff0c;就要求助于开业前期的广告渲染&#xff0c;此方案解决的重要问题就是如何在有轰动社会效应的同时又兼具营业佳绩。因此本次公司宣传…

Android8.1 MTK 浏览器下载的apk点击无反应不能安装

最近测试人员发现用原生浏览器下载的apk点击安装时无反应&#xff0c;不能安装。 在/vendor/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/DownloadHandler.java 中&#xff0c;发现下载的apk文件缺少了mime类型&#xff0c;如下图 mimetype null造…

第五章TCP/IP 网络在我们身边

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

Ubuntu22.2下C语言编程实现,首次,最佳适应算法

参考目录&#xff1a;1.题目要求2.分析设计3.程序代码4.运行截图5.程序说明1.题目要求 编写C语言程序&#xff0c;模拟实现首次/最佳/最坏适应算法(选择其中之一即可)的内存块分配和回收&#xff0c;要求每次分配和回收后显示出空闲分区和已分配分区的情况。假设初始状态下&am…

SpringBoot整合redis+mysql

SpringBoot整合Redis 测试连接 添加相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…

【TFS-CLUB社区 第7期赠书活动】〖从零开始利用Excel与Python进行数据分析 自动化办公实战宝典〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《从零开始利用Excel与Python进行数据分析 自动化办公实战宝典》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 抽奖方式与截止时间❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《从零开始利用Excel与…

【数据结构】二叉树的前中后序遍历

二叉树的三种遍历1. 创建一棵简单的二叉树1.1 二叉树结构体实现1.2 创造一个二叉树结点的函数1.3 手动创造一棵二叉树2.为什么要遍历&#xff1f;3.最重要的知识&#xff1a;由二叉树引出的子问题分析4.遍历4.1 前序遍历4.2 中序遍历4.3 后序遍历5.总结1. 创建一棵简单的二叉树…

基于springboot车辆充电桩设计与实现的源码+文档

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;车辆充电桩管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&…

18.3 内存池概念、代码实现和详细分析

一&#xff1a;内存池的概念和实现原理概述 malloc&#xff1a;内存浪费&#xff0c;频繁分配小块内存&#xff0c;浪费更加明显。 “内存池”要解决什么问题&#xff1f; 1、减少malloc()的次数&#xff0c;减少malloc()调用次数就意味着减少对内存的浪费 2、减少malloc()的…

JavaEE高阶---SpringBoot的创建和使用

一 : 什么是SpringBoot? Spring的诞生是为了简化 Java 程序的开发的,Spring Boot 的诞生是为了简化 Spring 程序开发的.Spring Boot 是所有基于 Spring 开发的项目的起点 . Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件 . Sprin…

深度学习系列2——Pytorch 图像分类(AlexNet)

1. 概述 本文主要是参照 B 站 UP 主 霹雳吧啦Wz 的视频学习笔记&#xff0c;参考的相关资料在文末参照栏给出&#xff0c;包括实现代码和文中用的一些图片。 整个工程已经上传个人的 github https://github.com/lovewinds13/QYQXDeepLearning &#xff0c;下载即可直接测试&a…

你了解PMP考试新考纲的内容吗?

2021年新版PMP考纲变化趋势 随着时代发展&#xff0c;PMP认证本身也通过改版不断调整定位&#xff0c;与全球项目管理趋势相匹配&#xff0c;确保在全球项目管理专业领域保持“黄金标准”。 新版本变化如下&#xff1a; 五大过程组变为三大板块。之前一直沿用的“启动、规划…

Transformer时间序列预测

介绍&#xff1a; 提示&#xff1a;Transformer-decoder 总体介绍 本文将介绍一个 Transformer-decoder 架构&#xff0c;用于预测Woodsense提供的湿度时间序列数据集。该项目是先前项目的后续项目&#xff0c;该项目涉及在同一数据集上训练一个简单的 LSTM。人们认为 LSTM 在…

阿里P8总结的Nacos入门笔记,从安装到进阶小白也能轻松学会

前言 都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升…

GPC规范-SCP02

SPC02 流程 SPC02 指令 命令&#xff1a; 响应&#xff1a; 举例回复&#xff1a; 密钥分散数据&#xff1a; 0000FFFFFFFFFFFFFFFF Key Info&#xff1a; 20 02&#xff08;scp02&#xff09; Card挑战数&#xff1a; 001AC6619BE83082 Card加密值&#xff1a; 7…

leetcode刷题(133)——剑指 Offer 07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,15,7]示例 2: Input: preord…

(十一)笔记.net学习表达式目录树Expression

&#xff08;十一&#xff09;笔记.net学习表达式目录树Expression1.什么是表达式目录树&#xff08;1&#xff09;Func和表达式的不同&#xff08;2&#xff09;表达式树拆解&#xff08;3&#xff09;自己拼装表达式目录2.动态拼装表达式目录和扩展应用3.解析表达式目录&…