【发布时间】:2020-05-11 11:07:49
【问题描述】:
import sys
for i in range(30):
# a = int(str(i),base = 16).to_bytes(4,sys.byteorder)
a = i.to_bytes(4,sys.byteorder)
print(a)
这里sys.byteorder 似乎是'小'。上面代码的输出是:
b'\x00\x00\x00\x00'
b'\x01\x00\x00\x00'
b'\x02\x00\x00\x00'
b'\x03\x00\x00\x00'
b'\x04\x00\x00\x00'
b'\x05\x00\x00\x00'
b'\x06\x00\x00\x00'
b'\x07\x00\x00\x00'
b'\x08\x00\x00\x00'
b'\t\x00\x00\x00'
b'\n\x00\x00\x00'
b'\x0b\x00\x00\x00'
b'\x0c\x00\x00\x00'
b'\r\x00\x00\x00'
b'\x0e\x00\x00\x00'
b'\x0f\x00\x00\x00'
b'\x10\x00\x00\x00'
b'\x11\x00\x00\x00'
b'\x12\x00\x00\x00'
b'\x13\x00\x00\x00'
b'\x14\x00\x00\x00'
b'\x15\x00\x00\x00'
b'\x16\x00\x00\x00'
b'\x17\x00\x00\x00'
b'\x18\x00\x00\x00'
b'\x19\x00\x00\x00'
b'\x1a\x00\x00\x00'
b'\x1b\x00\x00\x00'
b'\x1c\x00\x00\x00'
b'\x1d\x00\x00\x00'
注意这里的整数 9 被写成 b'\t\x00\x00\x00' 令人讨厌,还有类似的奇怪的东西,例如 0xa 和 0xd。
这是一种异常还是我缺乏这些符号的知识? 我的 Python 版本是 3.8.2。
【问题讨论】:
-
您期望每个字节都以一致的表示形式输出。但是您的代码要求输出为字节串。字节串将可打印的 ascii 显示为字符,对 Python 定义的非打印字符(例如换行符和制表符)使用反斜杠转义,其余部分仅退回到十六进制转义。如果您对输出格式的方式有强烈的感觉,那么您有足够的设施来做到这一点。默认表示实际上非常有用。例如
b"hello world"比一堆十六进制转义要友好得多。 -
我会说格式对我来说很重要:P 我只是想要一个代码来转换我们在高中学习过的十六进制表示形式的数字。我开始尝试数字,因为我完全知道会发生什么。我的最终意图是为我输入的任何数字获取十六进制“字符串”。我希望
to_bytes()能把我送到那里,但事实并非如此。你建议我下一步做什么? -
为什么不直接使用
hex?
标签: python python-3.x binary byte