Python大小端Hex_Int转换

Python大小端Hex_Int转换

前言

在计算机中,字节序是指字节存储的顺序。大端字节序(Big Endian)是指将高位字节存储在起始地址,而小端字节序(Little Endian)则是将低位字节存储在起始地址。在Python中,我们可以使用一些简单的方法来进行16进制的大小端转换。

本文提供几种方法,组合后可实现hex int bytes等相互转换,其中涉及

  • bin()将一个整数转换为带前缀 “0b” 的二进制数字符串

  • hex()将整数转换为带前缀 “0x” 前缀的小写十六进制数字符串

  • oct()将整数转换为带前缀 “0o” 的八进制数字符串

  • bytes.fromhex()此 bytes 类方法返回一个解码给定字符串的 bytes 对象

  • float.fromhex()返回以十六进制字符串 s 表示的浮点数的类方法

  • int.from_bytes()返回由给定字节数组所表示的整数。

  • int.to_bytes()返回表示一个整数的字节数组。

正文

函数说明

  1. bin()

如果 x 不是一个 Python int 对象,则它必须定义返回一个整数的 index() 方法。 下面是一些例子:

bin(3)
'0b11'
bin(-10)
'-0b1010'

若要控制是否显示前缀“0b”,可以采用以下两种方案:

format(14, '#b'), format(14, 'b')
('0b1110', '1110')
f'{14:#b}', f'{14:b}'
('0b1110', '1110')
  1. hex()

如果 x 不是一个 Python int / float 对象,则它必须定义返回一个整数 / 浮点数的 index() 方法。 下面是一些例子:

hex(255) #必须是int
'0xff'
hex(-42) #必须是int
'-0x2a'
float(3.14).hex()
'0x1.91eb851eb851fp+1'
float(-9.8).hex()
'-0x1.399999999999ap+3'

如果要将整数 / 浮点数转换为大写或小写的十六进制字符串,并可选择有无“0x”前缀,则可以使用如下方法:

'%#x' % 255, '%x' % 255, '%X' % 255
('0xff', 'ff', 'FF')
format(255, '#x'), format(255, 'x'), format(255, 'X')
('0xff', 'ff', 'FF')
f'{255:#x}', f'{255:x}', f'{255:X}'
('0xff', 'ff', 'FF')
  1. int.from_bytes()

classmethod int.from_bytes(bytes, byteorder='big', *, signed=False)

返回由给定字节数组所表示的整数。

int.from_bytes(b'\x00\x10', byteorder='big')
16
int.from_bytes(b'\x00\x10', byteorder='little')
4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
-1024
int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
64512
int.from_bytes([255, 0, 0], byteorder='big')
16711680

常用转换

def hex_to_int(value_str: str, byteorder='little') -> int:
    return int.from_bytes(bytes.fromhex(value_str), byteorder=byteorder, signed=True)

def int_to_hex(value_int: int, length: int, byteorder='little') -> str:
    return int(value_int).to_bytes(length, byteorder).hex().upper()

int_to_hex(10000, 4)
'10270000'

hex_to_int("10270000")
10000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值