我正在使用 Python 中的虚拟地址读取 64 位 Linux 机器上的内存寄存器。但是,我从每个寄存器输出的(当然)是一个长值,例如 282584257676671
我对一般的 PC 架构有点困惑,我有一些问题:
- 为什么这个 long 值有 15 个位置(而不是 16 个?)
- 那么 32 位架构中的 long 值是否有 7 个位置?
- Linux 内存页 (4kb) 是 (4096/64) = 64 个寄存器的池吗?
- Linux 内存页也有地址吗?
- 最重要的是:我如何在 Python 中将这个 long 转换为字符串以及这个字符串有多长?
谢谢!
编辑:
这就是用 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 个?
最佳答案
是的,您可以在 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
其他问题:
- Why has this long value 15 positions (and not 16?)
- Do the long values in a 32bit architecture have 7 positions then?
因为您在这里看到的数字没有用 0 填充,所以唯一的答案是它需要多长就多长!例如,如果内存地址是 42
,当您以十进制打印时,它将是 2 位数字。
此外,您需要注意所谈论的基地。在十六进制中,64 位整数可以用 8 位或更少的数字表示,如 0xFFFFFFFF
(每个字节两位数)。在十进制中,64 位整数可以用 20 位或更少的数字表示,例如 18446744073709551615
。
关于python - 在 Python 中将 long 从寄存器转换为 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21789238/