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

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


前言

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


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

TO->>>

十进制

二进制源码

二进制补码

十六进制

十进制


dec_to_bin

dec_to_bnr

dec_to_hex

二进制源码

bin_to_dec


bin_to_bnr

bin_to_hex

二进制补码

bnr_to_dec

bnr_to_bin


bnr_to_hex

十六进制

hex_to_dec

hex_to_bin

hex_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


相关文章
|
1天前
|
缓存 测试技术 Python
Python中的装饰器:优雅地增强函数功能
在Python编程中,装饰器是一种强大的工具,它能够在不改变函数本身的情况下,动态地增强其功能。本文将深入探讨装饰器的工作原理、常见用法以及如何利用装饰器提高代码的可重用性和可维护性。
|
1天前
|
资源调度 计算机视觉 Python
`scipy.ndimage`是SciPy库中的一个子模块,它提供了许多用于处理n维数组(通常是图像)的函数。
`scipy.ndimage`是SciPy库中的一个子模块,它提供了许多用于处理n维数组(通常是图像)的函数。
7 0
|
1天前
|
Python
`scipy.signal`模块是SciPy库中的一个子模块,它提供了信号处理、滤波、频谱分析等功能。这个模块包含了许多用于信号处理的函数和类,其中`butter()`和`filtfilt()`是两个常用的函数。
`scipy.signal`模块是SciPy库中的一个子模块,它提供了信号处理、滤波、频谱分析等功能。这个模块包含了许多用于信号处理的函数和类,其中`butter()`和`filtfilt()`是两个常用的函数。
10 0
|
2天前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
11 0
|
2天前
|
SQL Java C++
Python代码示例简单的print()函数使用
Python代码示例简单的print()函数使用
4 0
|
2天前
|
存储 Python
`input()` 函数是 Python 中的一个内置函数,用于从用户那里获取输入。
`input()` 函数是 Python 中的一个内置函数,用于从用户那里获取输入。
4 0
|
2天前
|
Unix Linux C语言
`ctypes`是Python的一个标准库,它提供了C兼容的数据类型,并允许在Python中调用共享库中的函数。
`ctypes`是Python的一个标准库,它提供了C兼容的数据类型,并允许在Python中调用共享库中的函数。
4 0
|
6天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
20 3
|
8天前
|
开发者 Python
Python元类实战:打造你的专属编程魔法,让代码随心所欲变化
【7月更文挑战第7天】Python的元类是编程的变形师,用于创建类的“类”,赋予代码在构建时的变形能力。
30 1
|
6天前
|
数据采集 大数据 数据安全/隐私保护
Python编程:如何有效等待套接字的读取与关闭
Python网络编程中,套接字事件处理至关重要。利用`selectors`模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器,注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中,实现了数据收发与连接管理,有效应对网络爬虫或聊天应用的需求,同时保护了真实IP。
Python编程:如何有效等待套接字的读取与关闭