这是此代码的正确使用方式吗?

时间:2016-06-22 15:06:14

标签: python-2.7

data = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"
result1 = data.decode('hex')[::-1]
  1. 十六进制数据被解码为十进制,即6,860,217,587,554,922,525,607,992,740,653,361,396,256,930,700,588,249,487,127
  2. 然后将十进制数6,860,217,587,554,922,525,607,992,740,653,361,396,256,930,700,588,249,487,127转换为位并反转其顺序(little-endian)并作为bitarray存储在result1变量中?
  3. 这是该代码究竟发生的事情还是我误解了什么? 那么result1变量是一个比特阵列?

    如果它只是一个整数变量,它怎么能保持那么长的十进制值?

1 个答案:

答案 0 :(得分:0)

使用双引号或单引号声明

Strings in python,因此变量数据包含字符串。 您可以直接在python中检查变量的类型:

data = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"
type(data)

输出

str

意味着变量是一个字符串。 当您在字符串上调用函数decode(' hex')时,您将获得另一个字符串:

data.decode('hex')
'\x00\x00\x00\x00\x00\x00\x00\x01\x17\xc8\x03x\xb8\xda\x0e3U\x9bY\x97\xf2\xadU\xe2\xf7\xd1\x8e\xc1\x97[\x97\x17'

原始字符串中的每个字符都被解释为十六进制数字,每对十六进制数字 - e.s. " 17" - 使用转义序列转换为十六进制字符\ x - 变为" \ x17"。

当你写" \ x41"你基本上告诉python将41解释为单个ASCII字符,其十六进制表示为41。

ASCII table包含与ascii字符关联的十六进制,十进制和八进制值。

如果您尝试例如

"48454C4C4F".decode('hex')

你获得字符串" HELLO"

最后当你在字符串上使用[:: - 1]时,你可以反转它:

"48454C4C4F".decode('hex')[::-1]

生成字符串" OLLEH"

您可以找到有关阅读python documentation的转义字符的详情。