2012-01-11 2 views
-2
char * data = 0xFF000010FFFFFFFFFFFFFFFFFFFFFFFFFFF; 

data[1] (0x00000010)에 더블 워드를 입력하고이를 int i에 저장하고 싶습니다.바이너리 데이터에서 더블 워드 얻기

트릭이 실행 되나요?

int i = (int) data[1]+data[2]+data[3]+data[4] 
+3

답변은 플랫폼이 빅 엔디안인지 또는 리틀 엔디 언인지에 따라 다릅니다. 그것은 어느 쪽이든 작동하지 않을 것이다. –

답변

2

정수의 올바른 부분에 값을 배치하는 대신 4 바이트를 추가하려고합니다. 플랫폼의 endianness을 지정하지 않으면 최종 답을 제공 할 수 없습니다.

일반적인 방법은 INT의 올바른 위치에 각 바이트 배치하고, 같은 것을 :

INT의 I = 256 개 * 256 개 * 256 개 * 데이터 [0] + 256 개 * 256 개 * 데이터 [1] + 256 개 * 데이터 [2] + 데이터 [3]

인덱스 0 기반 아닌 예에서와 같이 1 계 있는지 (빅 엔디안 예)

참고. 이 예제에서 "기본"은 256이며 각 바이트는 256 개의 값을 나타낼 수 있기 때문입니다. 왜 그런지

고려, 진수

5234을 이해하는

당신은 다시 쓸 수

로 그 :

5000 + 200 + 30 + 4

10 * 10 * 10 * 5 + 10 * 10 * 2 + 10 * 3 + 4

각 자릿수에 대한 데이터를 처리 할 때 값을 곱하기 숫자 - 자릿수 (밑이 10 인 경우 오른쪽 끝자리는 10^0, 10^1, 10^2 등).

1

문자열을 실제 데이터로 변환해야합니다. Atol() 또는 비슷한 것을 사용하여 메모리에 값을 가져온 다음 편집에 대해 걱정하십시오.