【问题标题】:Python bytes representationPython 字节表示
【发布时间】:2019-03-12 07:22:20
【问题描述】:

我正在 python 上编写一个十六进制查看器来检查原始数据包字节。我使用 dpkt 模块。

我认为一个十六进制字节的值可能在 0x00 和 0xFF 之间。但是,我注意到 python bytes 表示看起来不同:

b'\x8a\n\x1e+\x1f\x84V\xf2\xca$\xb1'

我不明白这些符号是什么意思。如何将这些符号转换为可以在十六进制查看器中显示的原始 1 字节值?

【问题讨论】:

    标签: python-3.x byte representation


    【解决方案1】:

    \xhh 表示 hh 的十六进制值。即它是编码 0xhh 的 Python 3 方式。

    https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals

    字符串开头的 b 表示变量应该是字节类型而不是 str。上面的链接也涵盖了这一点。 \n 是换行符。

    您可以使用 bytearray 来存储和访问数据。这是在您的问题中使用字节字符串的示例。

    example_bytes = b'\x8a\n\x1e+\x1f\x84V\xf2\xca$\xb1'
    encoded_array = bytearray(example_bytes)
    print(encoded_array)
    >>> bytearray(b'\x8a\n\x1e+\x1f\x84V\xf2\xca$\xb1')
    # Print the value of \x8a which is 138 in decimal.
    print(encoded_array[0])
    >>> 138
    # Encode value as Hex.
    print(hex(encoded_array[0]))
    >>> 0x8a
    

    希望这会有所帮助。

    【讨论】:

    • 好的,我如何将这个 python-type-encoded 序列 解码为 hex 字节 数组,其中包含 [0x00 - 0xFF] 范围内的值?我想获得每字节数据包表示。类似于 HxD 视图。
    • 我没有使用 HxD,所以不确定你需要什么,但你可以使用 bytearray 类来存储和访问序列。我将使用一些示例代码编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 2014-05-07
    • 1970-01-01
    • 2023-03-27
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多