Python 3 struct.pack() 打印奇怪的字符

2023-12-10

我正在测试 struct 模块,因为我想将带有字节(char)和 unsigned int 参数的简单命令发送到另一个应用程序。

然而,在转换为小端无符号整数时,我发现了一些奇怪的事情,这些示例打印了正确的十六进制表示形式:

>>> import struct
>>> struct.pack('<I',7)
b'\x07\x00\x00\x00'
>>> struct.pack('<I',11)
b'\x0b\x00\x00\x00'
>>> struct.pack('<I',16)
b'\x10\x00\x00\x00'
>>> struct.pack('<I',15)
b'\x0f\x00\x00\x00'

但这些例子显然不是:

>>> struct.pack('<I',10)
b'\n\x00\x00\x00'
>>> struct.pack('<I',32)
b' \x00\x00\x00'
>>> struct.pack('<I',64)
b'@\x00\x00\x00'

我将不胜感激任何解释或提示。预先感谢!


Python 很有帮助。

The bytes表示将对任何可打印的字节使用 ASCII 字符,并对其余字节使用转义码。

因此,0x40 被打印为@,因为这是一个可打印的字节。但0x0a表示为\n相反,因为这是换行符的标准 Python 转义序列。 0x00 表示为\x00,表示 NULL 字节值的十六进制转义序列。 ETC。

所有这些只是回显值时的 Python 表示形式,以方便您进行调试。实际值本身仍然由实际字节值组成。

>>> b'\x40' == b'@'
True
>>> b'\x0a' == b'\n'
True

只是可打印 ASCII 范围内的任何字节都将显示为该 ASCII 字符而不是\xhh十六进制转义或专用\c单字符转义序列。

如果你想看only十六进制表示,使用binascii.hexlify()功能:

>>> import binascii
>>> binascii.hexlify(b'@\x00\x00\x00')
b'40000000'
>>> binascii.hexlify(b'\n\x00\x00\x00')
b'0a000000'

相反,它将字节返回为十六进制字符(没有前缀)。返回值当然不再是相同的值,您现在有一个原始长度两倍的字节串,由表示十六进制值的字符、文字组成a通过到f and 0通过到9人物。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 3 struct.pack() 打印奇怪的字符 的相关文章

随机推荐

  • 将(大量)零写入二进制文件

    这可能是一个愚蠢的问题 但我无法找到正确的答案 我想存储 不要问为什么 a 的二进制表示 2000 2000 2000 零数组写入磁盘 二进制格式 实现这一目标的传统方法是 with open myfile wb as f f write
  • 如何创建新的窗口按钮 PySide/PyQt?

    我在使用 Python 2 7 的 PyQt4 PySide 中使用 新窗口 功能时遇到问题 我连接了一个initNewWindow 函数 创建一个新窗口 一个操作并将其放入菜单栏中 曾经是桌面软件中的常见功能 新窗口不会弹出并关闭 而是会
  • Xcode 6 Interface Builder“无法打开编译的 nibs”错误,FiksuSDK

    我有一个使用 CocoaPods 在 Xcode 5 中运行良好的应用程序 当我在 Xcode 6 上打开应用程序并点击构建并运行时 我从 FiksuSDK 收到四个关于编译 nib 文件的错误 在侧面 它指出我没有查看它的权限 但点击它会
  • 选择栏被隐藏

    我已经添加了adjustPan in Manifest xml这里的文件是我的Activity tag in Manifest xml android name LoginActivity android configChanges ori
  • 典型的 IoC 容器用法 - 向下传递数据

    我最近开始使用IoC第一次使用容器 但我没有接受过使用它的最佳实践的教育 更具体地说我正在使用Unity在一个 C NET 项目中 我开始使用它 因为它附带Prism 我使用容器来解析 顶级 对象 并且它们根据容器获得注入的正确对象 但是
  • C# 通过拖动绘制线条

    如何像windows画图那样画一条线 单击固定第一个点 第二个点 和线 随鼠标移动 再单击固定线 int x 0 y 0 protected override void OnMouseMove MouseEventArgs e base O
  • 两个日期之间的 Pythonic 差异(以年为单位)?

    下面有更有效的方法吗 我希望将两个日期之间的年份差异作为单个标量 欢迎任何建议 from datetime import datetime start date datetime 2010 4 28 12 33 end date datet
  • 你如何知道 jQuery 函数何时返回 false?

    return false 似乎工作在submitHandler但我不知道为什么 function submitHandler post this attr action this serialize null script return f
  • iOS 8 Swift 音频播放完成时执行方法

    我正在 iOS 8 的 Swift 中播放音频文件 我需要知道声音何时结束 如何在声音结束时执行一个方法 这取决于你如何玩它 查找其状态更改可以触发 KVO 通知的委托方法 通知或可观察属性 例如 如果您使用 AVAudioPlayer 它
  • 如何为 Npgsql 提供自定义数据类型作为参数?

    我想使用 Npgsql 将键值对数组作为参数传递给 PostgreSQL 函数 我定义了以下类型 drop type if exists key value pair create type key value pair as k varc
  • 如何使用复选框列和绑定从 Xceed\Extended WPF Toolkit 设置数据网格控件

    我正在尝试将 WPF 数据网格替换为 xceed Extended WPF Toolkit DataGridControl 我需要对复选框列中的单击事件做出反应 以总结许多其他列 在现有的数据网格中 我有一个复选框列 它绑定到一个可观察集合
  • 无法使 (UTF-8) 繁体中文字符在 PHP gettext 扩展中工作(在 poEdit 中创建的 .po 和 .mo 文件)

    我检查了MSDN语言环境字符串是 zh Hant 但我也尝试使用 zh TW 中文 台湾 繁体中文字符在 poEditor 中看起来不错 但是当我在浏览器中打开文件时 这些字符只是奇怪的符号 o 我认为翻译是有效的 但编码有问题 我对字符集
  • AngularJS + Json:如何渲染 html

    我知道这个问题被问了很多次 但我相信我的设置不同 因此需要在不同的场景中提出一个新问题 有很多示例展示了如何渲染 HTML 但我似乎无法使其与任何示例一起使用 我想渲染 html aboutlongs 0 description 这有 br
  • 在powershell中拆分表情符号序列

    我有一个仅填充表情符号的文本框 没有空格或任何类型的字符 我需要拆分这些表情符号才能识别它们 这是我尝试过的 function emoji to unicode foreach emoji in textbox Text unicode S
  • 无法为委托分配参数类型不太具体的匿名方法[重复]

    这个问题在这里已经有答案了 public class Program delegate void Srini string param static void Main string args Srini sr new Srini Prin
  • 页面刷新后保留TextBox值

    我有一个文本框 这就是我为其赋值的方式 var start moment subtract 6 days var end moment datePicker daterangepicker timepicker false startDat
  • React JS:API 调用成功后获取上下文数据

    我一直在获取上下文数据 我有一个上下文和一个使用其数据的组件 我需要在我的组件中获取 API 调用成功时上下文变量的更新数据 那么我该怎么做呢 这是我尝试过的 上下文 js import React useState createConte
  • 更改 Rails 3.1 中的视图格式(提供移动 html 格式,回退到普通 html)

    我正在我们普通的 html 网站旁边创建一个移动网站 使用导轨 3 1 移动站点在子域 m site com 中访问 我已经定义了移动格式 Mime Type register alias text html mobile 在 Applic
  • 在链表中的单个索引处存储超过 1 个数据项?

    我试图在链接列表中的单个索引处存储多个数据项 我教科书中的所有示例似乎都说明每个索引仅添加 1 条数据 我假设可以添加更多吗 例如 使用 Collections API 来存储整数 我将执行以下操作 LinkedList
  • Python 3 struct.pack() 打印奇怪的字符

    我正在测试 struct 模块 因为我想将带有字节 char 和 unsigned int 参数的简单命令发送到另一个应用程序 然而 在转换为小端无符号整数时 我发现了一些奇怪的事情 这些示例打印了正确的十六进制表示形式 gt gt gt