将字节转换为整数?

2025-02-07 08:44:00
admin
原创
77
摘要:问题描述:我目前正在开发一个加密/解密程序,我需要能够将字节转换为整数。我知道:bytes([3]) = b'x03' 但我找不到如何做相反的事情。我做错了什么?解决方案 1:假设你至少使用 3.2 版本,则有一个内置功能:int.from_bytes(bytes,,byteorder,signed=Fals...

问题描述:

我目前正在开发一个加密/解密程序,我需要能够将字节转换为整数。我知道:

bytes([3]) = b'x03'

但我找不到如何做相反的事情。我做错了什么?


解决方案 1:

假设你至少使用 3.2 版本,则有一个内置功能:

int.from_bytesbytes,,byteordersigned=False*)

...

参数bytes必须是字节类对象或生成字节的可迭代对象。

byteorder参数确定用于表示整数的字节顺序。如果byteorder"big",则最高有效字节位于字节数组的开头。如果byteorder"little",则最高有效字节位于字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder作为字节顺序值。

signed参数表示是否使用二进制补码来表示整数。

## Examples:
int.from_bytes(b'x00x01', "big")                         # 1
int.from_bytes(b'x00x01', "little")                      # 256

int.from_bytes(b'x00x10', byteorder='little')            # 4096
int.from_bytes(b'xfcx00', byteorder='big', signed=True)  #-1024

解决方案 2:

字节列表是可下标的(至少在 Python 3.6 中)。这样,您可以单独检索每个字节的十进制值。

>>> intlist = [64, 4, 26, 163, 255]
>>> bytelist = bytes(intlist)       # b'@x04x1axa3xff'

>>> for b in bytelist:
...    print(b)                     # 64  4  26  163  255

>>> [b for b in bytelist]           # [64, 4, 26, 163, 255]

>>> bytelist[2]                     # 26 

解决方案 3:

list()可用于将字节转换为 int(适用于 Python 3.7):

list(b'x03x04x05')
[3, 4, 5]

解决方案 4:

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

对我来说不起作用 我使用了该网站的功能,效果很好

https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python

def bytes_to_int(bytes):
    result = 0
    for b in bytes:
        result = result * 256 + int(b)
    return result

def int_to_bytes(value, length):
    result = []
    for i in range(0, length):
        result.append(value >> (i * 8) & 0xff)
    result.reverse()
    return result

解决方案 5:

在处理缓冲数据时我发现这很有用:

int.from_bytes([buf[0],buf[1],buf[2],buf[3]], "big")

假设中的所有元素buf都是8位长。

解决方案 6:

将字节转换为位串

format(int.from_bytes(open('file','rb').read()),'b')

解决方案 7:

这是我在寻找现有解决方案时偶然发现的一个老问题。我提出了自己的解决方案,并想与大家分享,因为它允许您根据字节列表创建 32 位整数,并指定偏移量。

def bytes_to_int(bList, offset):
    r = 0
    for i in range(4):
        d = 32 - ((i + 1) * 8)
        r += bList[offset + i] << d
    return r

解决方案 8:

#convert bytes to int 
    def bytes_to_int(value):
        return int.from_bytes(bytearray(value), 'little')

    bytes_to_int(b'xa231')
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2556  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  敏捷测试作为软件开发过程中的重要环节,其测试报告与度量方法对于保障软件质量、提升项目效率具有关键意义。在敏捷开发模式下,快速迭代、频繁交付成为常态,传统的测试报告与度量方式难以满足这种动态变化的需求。因此,深入理解并掌握敏捷测试中的测试报告与度量方法,对于项目团队实现高效协作、持续改进软件质量至关重要。敏捷测试报告的特...
敏捷开发培训   0  
  软件开发领域存在多种开发模型,其中敏捷开发与传统瀑布模型是两种备受关注且差异显著的开发方式。深入了解它们之间的区别,有助于开发者和项目管理者根据项目特点选择更合适的开发模式,提高项目的成功率和交付质量。开发流程的差异瀑布模型遵循一种线性、顺序的开发流程。从项目的需求分析开始,依次经过设计、编码、测试,最后到项目交付。每...
敏捷冲刺计划   0  
  敏捷冲刺是软件开发等项目中常用的迭代式开发方法,旨在快速响应变化,高效交付价值。在敏捷冲刺过程中,有效的沟通至关重要,它能确保团队成员之间信息畅通,减少误解,提高协作效率,从而推动项目顺利进行。以下将详细介绍敏捷冲刺中的7个沟通技巧。每日站会:简洁高效同步信息每日站会是敏捷冲刺中的重要沟通仪式。团队成员每天定时聚集,每...
敏捷谁主持站立会   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用