2014-02-14 2 views
0

64 비트 Linux 컴퓨터의 메모리 레지스터를 파이썬에서 가상 주소를 사용하여 읽습니다. 그러나 각 레지스터에서 내 출력은 예를 들어, 긴 값 (물론)이다 282584257676671파이썬에서 레지스터에서 char 배열로 길이가 변환

나는 일반적으로 PC 아키텍처에 대해 조금 혼란 스러워요 나는 몇 가지 질문이 있습니다

  • 왜이 오래있다가 값 15 위치 (16이 아님)
  • 32 비트 아키텍처의 long 값에는 7 개의 위치가 있습니까?
  • Linux 메모리 페이지 (4kb)는 (4096/64) = 64 레지스터의 풀입니까?
  • Linux 메모리 페이지에도 주소가 있습니까?
  • 가장 중요한 : 어떻게이 긴 코드를 파이썬의 문자열로 변환 할 수 있습니까?이 문자열은 얼마나 오래 사용할 수 있습니까?

고맙습니다!

편집 :

그게 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; 

은 어떻게 파이썬에서이 작업을 수행 할 수 있습니다 내 문자 배열은 또한 64 비트 아치 4의 크기를해야합니다? 또는 8?

+0

힌트 : 숫자의 십진수 표현의 자릿수는 비트 수를 나타내지는 않습니다. 귀하의 예는 적어도 51 비트가 아니라 15 비트입니다. – Kevin

답변

0

마지막 질문 (가장 중요한 질문 : D)에 응답합니다.

l = 282584257676671 
s = str(l) 

print(s) 

>>> 282584257676671 

print(s[0]) 

>>> 2 
1

예, 기본적으로 파이썬에서 동일한 작업을 수행 할 수 있습니다. 다른 질문에 대한

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 

:

  • 이유가이 long 값 (15 개)의 위치 (그리고 16?)
  • 후 7 개 위치를 가지고 32 비트 아키텍처에서 긴 값을합니까? 당신이 여기에서 찾고있는 숫자는 0으로 채워되지 않기 때문에

는 유일한 대답은 한가 될 필요로 할 것입니다! 예를 들어 메모리 주소가 42 인 경우 10 진수로 인쇄하면 2 자리 길이가됩니다.

또한, 어떤 기반에 대해서도주의해야합니다. 16 진수에서는 64 비트 정수를 0xFFFFFFFF (바이트 당 두 자리)과 같이 8 자리 이하로 나타낼 수 있습니다. 10 진수로, 64 비트 정수는 18446744073709551615과 같이 20 자리 이하로 나타낼 수 있습니다.

관련 문제