我正在使用他们在Python中的虚拟地址读取我的64位Linux机器上的内存寄存器。但是,我每个寄存器的输出(当然)是一个很长的值,例如282584257676671
我对PC架构有点困惑,我有一些问题:
谢谢!
编辑:
多数人可以用C做什么:
unsigned char dest[4];
unsigned long int l;
dest[0] = l & 0xFF;
dest[1] = (l >> 8) & 0xFF;
dest[2] = (l >> 16) & 0xFF;
dest[3] = (l >> 24) & 0xFF;
如何在Python中执行此操作,并且我的char数组在64位arch中的大小是4吗?还是8?
答案 0 :(得分:1)
是的,你可以在python中做同样的事情。
dest = [0] * 4
l = some_integer
dest[0] = l & 0xFF
dest[1] = (l >> 8) & 0xFF
dest[2] = (l >> 16) & 0xFF
dest[3] = (l >> 24) & 0xFF
提出其他问题:
- 为什么这个长值15个位置(而不是16个?)
- 32位架构中的长值是否有7个位置?
因为你在这里看到的数字没有用0填充,唯一的答案就是它只要它需要它!例如,如果内存地址是42
,当您以十进制打印时,它将是2位数。
此外,你需要注意你所谈论的基础。在十六进制中,64位整数可以用8位或更少的数字表示,如0xFFFFFFFF
(每个字节两位)。在十进制中,64位整数可以用20位或更少的数字表示,如18446744073709551615
。
答案 1 :(得分:0)
回答你的最后一个问题(最重要的一个问题:D)。
l = 282584257676671
s = str(l)
print(s)
>>> 282584257676671
print(s[0])
>>> 2