python - 在 Python 中将“大”整数转换为字节时遇到问题
问题描述
当我尝试打包一个整数时,我得到了一个意外的输出。对于小于或等于 16 的值,输出与我预期的一样,但是,对于更大的值,它会破坏我预期的输出。我在下面附上了几个例子。
Integer: 4
Output: b'\x00\x00\x00\x04'
Integer: 56
Output: b'\x00\x00\x008'
在这种情况下,整数 4 工作得很好,但是,我希望 56 的输出是b'\x00\x00\x00\x38'
(转换为十六进制)
Integer: 20
Output: b'\x00\x00\x00\x14'
Integer: 56
Output: b'\x00\x00\x00('
Integer: 8
Output: b'\x00\x00\x00\x08'
在这个实例中,整数 8 给了我一个预期的输出,但是,对于我期望的整数 20 和我期望b'\x00\x00\x00\x14'
的 40 的大小b'\x00\x00\x00\x28'
(这是一个让我特别困惑的,因为"("
)。
到目前为止,我已经尝试了 3 种不同的方法来转换这些整数,但是它们都为我提供了较大整数的特殊字符。
struct.pack('>i', (size)
bytes([size])
(int(size)).to_bytes(1, byteorder='big')
我怀疑我需要在以某种方式打包整数之前对其进行操作,但我现在感觉很卡。我认为应该是预期的输出有什么问题吗?或者你有什么提示可以让我走上正确的道路吗?
PS:这是我的第一篇文章,如果我不清楚,请见谅哈哈
解决方案
对于 ASCII 范围内的可打印字符,Python 将它们显示为字符本身。
>>> b'\x38'
b'8'
>>> b'\x28'
b'('
换句话说,您将数据与其表示混淆了。
推荐阅读
- javascript - 如何在 RxJS 中创建一个 observable,它等待 2 个 observables(按顺序),然后行动,然后再按顺序等待这 2 个
- react-native - 学习项目
- java - 如何从 Firebase 存储中删除图片
- flutter - 带有 StreamBuilder 的 TextField 的初始值
- typescript - 如何根据参数中的函数返回类型指定打字稿条件类型
- peoplesoft - PeopleSoft 子查询没有选择正确的休假计划
- c# - 限制 NUnit 项目中的并行线程数
- swift - Cocoapod 中的 CoreML(pod 规范 lint 不起作用)
- javascript - 我用“JS原型”编写的用户输入代码不起作用
- c# - 我应该怎么做才能显示获得有利数字需要多少循环?