C/C++에서 char 배열을 어떤 위치에서 int로 변환 할 수 있습니까?정렬되지 않은 위치에서 char 배열을 int로 변환하는 방법은 무엇입니까?
unsigned char data[8];
data[0] = 0; data[1] = 1; ... data[7] = 7;
int32_t p = 3;
int32_t d1 = *((int*)(data+3)); // = 0x03040506 CORRECT
int32_t d2 = *((int*)(data+p)); // = 0x00010203 WRONG
업데이트 :
은 내가 const가 아닌 오프셋 (offset) 포인터 연산을 사용하려고하면 자동으로 (32 비트 아키텍처에) 가장 가까운 32 비트에 맞춰 비트, 다음 시도- 의견에서 언급했듯이 입력은 3의 튜플로 제공되며 나는 을 변경할 수 없습니다.
- 처리를 위해 3 개의 값을 int로 변환하고이 변환을 최대한 빨리 수행해야합니다.
- 솔루션은 크로스 플랫폼 일 필요는 없습니다. 나는 매우 특정 컴파일러와 프로세서로 작업 중이므로 big endian을 가진 32 비트 아키텍처라고 가정 할 수 있습니다.
- 결과의 최하위 바이트는 중요하지 않습니다 (위 참조).
현재 나의 주요 질문은 다음과 같습니다. 왜 d1에 올바른 값이 있지만 d2가 아닌가? 다른 컴파일러에서도 마찬가지입니까? 이 행동을 바꿀 수 있습니까?
** 중재자 주처럼 엔디 언 불가지론 방법으로 일을하는 것이 더 쉬울 것입니다 ** : 의견이 양도되었습니다. 삭제되었습니다. 답변이 있으면 게시하십시오. 더 좋은 방법있으세요? 답으로 게시하십시오! 기회를 잡으세요. –
가능하지 않으므로 정렬 문제를 피하기 위해 한 번에 4 픽셀 씩 작업하여 부분적으로 해결했습니다. – Karsten
이 중 하나가 작동하지 않았다 ... 컴파일러가 2^N 테두리에 정렬하는 것 같습니다. – Karsten