EBCDIC 十六进制字符串的 Python 字节表示

2024-03-28

我有一个十六进制字符串:

Hex = 'E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B'

作为字节对象,它看起来像这样:

b'\xe3\x88\x85@'b'\xe3\x88\x85@\x83\x96\x94\x97\xa4'b'\xe3\x88\x85@'b'\xe3\x88\x85@\x83\x96\x94\x97\xa4'b'\xe3\x88\x85@\x83'b'\xe3\x88'b'\xe3\x88\x85@\x83\x96\x94\x97\xa4'

在 EBCDIC 中是这样的:

The computer has rebooted from a bugcheck.

所以我知道十六进制 40 (x40) 在 EBCDIC 中是一个“空格”,在 ASCII 中是一个“@”

我不明白为什么 python 在打印字节对象时打印“@”而不是“\x40”

我的测试代码示例是:

import codecs
Hex = 'E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B'

output = []
DDF = [4,9,4,9,5,2,9]
distance = 0

# This breaks my hex string into chunks based off the list 'DDF'
for x in DDF:
    output.append(Hex[distance:x*2+distance])
    distance += x*2

#This prints out the list of hex strings
for x in output:
    print(x)

#This prints out they byte objects in the list
for x in output:
    x = codecs.decode(x, "hex")
    print(x)

#The next line print the correct text
Hex = codecs.decode(Hex, "hex")
print(codecs.decode(Hex, 'cp1140'))

上面的输出是:

E3888540
83969497A4A3859940
8881A240
9985829696A3858440
8699969440
8140
82A48783888583924B
b'\xe3\x88\x85@'
b'\x83\x96\x94\x97\xa4\xa3\x85\x99@'
b'\x88\x81\xa2@'
b'\x99\x85\x82\x96\x96\xa3\x85\x84@'
b'\x86\x99\x96\x94@'
b'\x81@'
b'\x82\xa4\x87\x83\x88\x85\x83\x92K'
The computer has rebooted from a bugcheck.

所以我想我的问题是如何让 python 将字节对象打印为“x40”而不是“@”

非常感谢你的帮助 :)


我认为你的字节数组有点不对劲。

根据this https://docs.python.org/3/library/codecs.html,需要使用“cp500”进行解码,例如:

my_string_in_hex = 'E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B'
my_bytes = bytearray.fromhex(my_string_in_hex)
print(my_bytes)

my_string = my_bytes.decode('cp500')
print(my_string)

output:

bytearray(b'\xe3\x88\x85@\x83\x96\x94\x97\xa4\xa3\x85\x99@\x88\x81\xa2@\x99\x85\x82\x96\x96\xa3\x85\x84@\x86\x99\x96\x94@\x81@\x82\xa4\x87\x83\x88\x85\x83\x92K')
The computer has rebooted from a bugcheck.

当您打印字节数组时,它仍然会打印“@”,但它实际上是“在幕后”的 \x40。这只是__repr__() https://docs.python.org/3/reference/datamodel.html#object.__repr__的对象。由于此方法不采用任何“解码”参数来正确解码,因此它只是创建一个“可读”字符串以用于打印目的。

__repr__() or repr() is "只是”;这只是一个“对象的表示“不是实际的对象。这并不意味着它实际上是一个“@”。我只是在打印时使用该字符。它仍然是一个字节数组,而不是一个字符串。

解码时,它将使用所选的代码页正确解码。

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

EBCDIC 十六进制字符串的 Python 字节表示 的相关文章

随机推荐

  • 无论如何,Bootstrap 导航栏都不会居中

    我一直在尝试使用 Bootstrap 将我的导航栏集中在导航栏的中心 这非常糟糕 我尝试过使用类似问题中的信息 例如this one https stackoverflow com questions 7165423 twitter boo
  • JS hasAttribute 带有数据属性值

    有没有一种原生方法 没有 jQuery 来检查 dom 元素是否具有具有所选值的属性 例如 assume doc has data mod do defined 这将是真的 document hasAttribute data mod 但这
  • Xamarin 表单 - 以流形式打开文件

    这可能是一个非常简单的问题 但当我们谈论流时我总是感到困惑 我正在尝试在 Xamarin Forms 项目的 Android 部分中打开一个文件 我有一个 Java IO File 我想将其转换为流 以便能够使用这个简单的函数将其发送到 A
  • 当一个值的所有者可以读取它而另一个线程更改它时,Rust 如何防止数据竞争?

    Rust 书中指出了以下内容参考文献和借用 https doc rust lang org book ch04 02 references and borrowing html mutable references 当我们有一个不可变的引用
  • 可观察,出错时重试并仅在完成时缓存

    我们可以使用cache 运算符来避免多次执行长任务 http请求 并重用其结果 Observable apiCall createApiCallObservable cache notice the cache the first time
  • JQuery 检测程序更改事件

    如果我执行 jQuery expr change function 那么当用户更改值时 我可以触发一个事件函数 如果以编程方式更改它 即如果我调用 jQuery expr val moo 是否可以触发它 或者如果一些普通的旧 JavaScr
  • Laravel 5:未找到 DB Seed 类

    我有这个 DatabaseSeeder php
  • Python正则表达式捕获各种url模式组

    我有包含这样的字符串的数据集 我想从中删除所有网址 http google com having trouble finding regex https google com for this case http google com te
  • 选择列表中最早的条目

    如果我有一个包含人员姓名和日期的列表 并且我只想保留每个人最早日期的条目 我该怎么做 我希望最终列表按姓氏字母顺序排列 然后是名字 并且仅包含末尾日期最早的条目 这是列表和我尝试过的示例 但它只是再次给了我相同的列表 L1 Smith Jo
  • Mongoose:Coffeescript 中的递归嵌入文档

    基于这个例子 https github com LearnBoost mongoose blob master examples schema js 有效 var Comment new Schema Comment add title t
  • 禁用 JFrame 中的背景绘制以正确显示 Aero (DWM) 效果

    我在 Java Windows 上使用 Windows Vista 7 的 DWM 功能时遇到问题 我想让我的框架背景使用 Aero 风格 执行此操作的 Windows API 由函数提供DwmExtendFrameIntoClientAr
  • 播放音频 iOS Objective-C

    我正在尝试在我的 iOS 应用程序中播放音频文件 这是我当前的代码 NSString soundFilePath NSString stringWithFormat test m4a NSBundle mainBundle resource
  • 如何在 iOS 7 中让 NSTimer 在后台运行超过 180 秒?

    我已经尝试过 但在 iOS 7 和 Xcode 4 6 2 中工作时间不超过 180 秒 请帮我 UIBackgroundTaskIdentifier bgTask UIBackgroundTaskInvalid UIApplication
  • 存储对相机胶卷图像的引用 - Swift 4

    我有一个非常简单的要求 但显然超出了我的能力范围 我想做的就是允许用户从相机胶卷中选择图像 然后在我的应用程序中存储对该图像的 引用 然后 我可以在需要时从相机胶卷中加载图像 我不想复制图像并将其保存在其他地方 因为我觉得这会浪费手机上的空
  • 如何为 Go 服务器应用程序设置 Let's Encrypt

    我有自己的域 其中包含用 Go 编写的 Web 服务 我使用内置的 Go Web 服务器 前面没有 Nginx 或 Apache 我想开始通过 HTTPS 提供服务 并且我意识到 Let s Encrypt 即将成为实现这一目标的方法 谁能
  • 为什么 C++17 中的全局内联变量和静态内联成员需要防护?

    从 C 17 开始 可以使用以下命令初始化标头中的全局变量和静态成员inline关键词 虽然我理解为什么函数中的静态变量需要受到保护 因为即使在多线程上下文中初始化也应该只发生一次 但我不明白为什么这些新的内联变量也受到保护 您可以在这里看
  • 使用实体框架数据模型添加验证属性

    前言 2015 年 2 月如果您仍在使用实体框架 EDMX 请帮自己一个忙 并使用实体框架代码优先进行结账 不同之处在于 您的表是从模型类创建的 而不是在 EDMX 中 模型类是使用表创建的 这是一个更简单的解决方案 而且这个问题中的问题甚
  • 如何从exe中找出目标框架名称和版本?

    我有一些使用 net Framework 4 5 或 net core 2 1 或 net core 3 1 创建的 exe 文件 我想仅使用 C 应用程序从此 DLL 获取框架名称和版本信息 我在下面编写了一段代码 该代码非常有用 并且适
  • 使用 Nodejs 和 Express 进行视频流传输

    我正在尝试使用nodejs 和express 将视频流式传输到html5 视频播放器 据我所知 很多人以前都这样做过 但是很少有人使用过express 在我发现的情况下 大多数人说这样做 var express require expres
  • EBCDIC 十六进制字符串的 Python 字节表示

    我有一个十六进制字符串 Hex E388854083969497A4A38599408881A2409985829696A38584408699969440814082A48783888583924B 作为字节对象 它看起来像这样 b xe