python中int、bytes、bytearray之间的转换

该文描述了一个从整数到字节串再到列表,然后再反向转换回整数的过程。主要涉及int对象使用to_bytes方法转为bytes,再通过bytearray和list进行操作,最后用int.from_bytes方法恢复为原始整数的步骤。
a = 32780	
b = a.to_bytes(8, sys.byteorder)		# int --> bytes  第一个参数表示转化结果bytes的位数, 第二个参数表示 大端or小端
ba = bytearray(b)	# bytes --> bytearray
bal = list(ba)		# bytearray --> list

ba_r = bytearray()
for i in range(8):
    ba_r.append(bal[i])		# list --> bytearray
b_r = bytes(ba_r)		# bytearray --> bytes
a_r = int.from_bytes(ba_r, sys.byteorder)		# bytearray --> int
### `int.from_bytes` 函数的用法和示例 `int.from_bytes` 是 Python 中用于将字节序列转换为整数的方法。它允许从一个字节对象(如 `bytes` 或 `bytearray`)中解析出一个整数,支持大端(big-endian)和小端(little-endian)字节序,并可选择是否为带符号整数。 其基本语法如下: ```python int.from_bytes(bytes, byteorder, *, signed=False) ``` - `bytes`:表示字节序列的对象。 - `byteorder`:指定字节序,可以是 `'big'` 或 `'little'`。 - `signed`:表示是否解析为带符号整数,默认为 `False`。 #### 示例 将一个 2 字节的大端字节序数据转换为整数: ```python data = b'\x00\x10' # 大端表示的 16 value = int.from_bytes(data, 'big') print(value) # 输出: 16 ``` 将一个 4 字节的小端字节序数据转换为带符号整数: ```python data = b'\xff\xff\xff\xff' # 小端表示的 -1(32 位) value = int.from_bytes(data, 'little', signed=True) print(value) # 输出: -1 ``` 该方法在处理二进制数据时非常有用,例如解析网络协议或文件格式中的整数值字段,尤其在不需要依赖 `struct` 模块的情况下提供了一种更简洁的替代方案 [^1]。 ### 带符号与无符号解析的区别 当 `signed=True` 时,`from_bytes` 支持解析负数。例如: ```python data = b'\xff\x0f' # 小端表示的 0x0fff value = int.from_bytes(data, 'little', signed=True) print(value) # 输出: 4095 data = b'\xff\xff\xff\xff' # 表示 -1(32 位) value = int.from_bytes(data, 'little', signed=True) print(value) # 输出: -1 ``` ### 处理不同长度的字节序列 `from_bytes` 支持任意长度的字节序列,例如: ```python data = b'\x00\x00\x01\x00' # 4 字节的大端表示 value = int.from_bytes(data, 'big') print(value) # 输出: 65536 ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值