【python】bin/dec/hex/bnr进制转换函数及fp32转十六进制
创始人
2024-02-15 07:04:12
0

 

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

前言

不知道为什么,给脚本专栏选的这个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 = digitspattern = 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) - 0x01dec = -(~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('

测试:

print(float_to_hex("17.5"))
print(float_to_hex("-17.5"))418c0000
c18c0000

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...