上下文: 我用python解码flex应用程序的amf响应。在
有了pyamf,我可以解码所有的响应,但是有一个值引起了我的注意。在
此值\xa2C被转换为4419
#\xa2C -> 4419
#\xddI -> 11977
我知道\x与一个十六进制值有关,但我无法获得将4419转换为\xa2C的函数
4419是一个整数。在
---更新1
这个原始值,不是十六进制的。在
因为我将这个值\xa2I转换为4425。在
那么\xa2I是什么样的值??? 谢谢!在
--更新2。在
^{pr2}$奇怪的是有些时候接受F之后的值,在其他情况下显示错误。但不是十六进制值是肯定的。在
您看到的是},这是67的ASCII表示:
AmfInteger
字节的字符串表示。第一个示例,\xa2C
由两个字节组成:0xa2
即162,和{要将其转换为AmfInteger,我们必须遵循AMF3 specifications,第1.3.1节(AmfInteger的格式在AMF0和AMF3中是相同的,所以我们看什么规范都无关紧要)。在
在该部分中,U29(可变长度无符号29位整数,amfinintegers在内部用来表示值)被定义为1、2、3或4字节序列。每个字节编码关于值本身的信息,以及后面是否有另一个字节。要想知道另一个字节是否在当前字节之后,只需检查是否设置了最高有效位:
^{pr2}$现在我们看到的是,第一个字节的序列,是一个完整的字节序列。第二个字节的位未设置,表示序列结束。为了从这些字节中获得实际值,我们现在只需要合并它们的值,同时屏蔽掉第一个字节的高位:
由此可以很容易地理解为什么其他值会给出您所观察到的结果。在
为了完整起见,这里还有一个Python代码片段,其中有一个解析U29的示例实现,包括所有的角点情况:
相关问题 更多 >
编程相关推荐