2012-06-07 3 views
0

나는 네온 내장 함수에서 bmp 파일 구문 분석 프로그램을 만들고 있습니다. 함수는 소스 파일 대상을 가리키는 const int를 필요로하지만 fstream을 사용하고 소스를 가리키는 파일 객체를 가져옵니다. 같은파일의 주소를 가리키는 const int 가져 오는 방법

const int *intFile = (int *)fopen("path-to-file.bmp", "r"); 

당신은 항상 캐스팅을 사용하여 다른 유형에 대한 포인터에 어떤 종류의 포인터를 할당 할 수 있습니다 : 그래서 나는 당신이 시도 할 수 INT 포인터

+0

네온 내장 함수 : cpc을 통해 수정할 수 없습니다, 즉, cpc는 "는 const를 문자 포인터"입니다 파일에서 작동하지 않으면 레지스터/메모리에서 작동합니다. 먼저 파일을 메모리로 읽어야합니다. –

+0

순진하게 들린다면 미안하지만 정확히 어떻게해야합니까? –

+1

파일을 메모리로 읽는 방법을 모르면 NEON과 같은 SIMD로 작업 할 준비가되지 않았습니다. C 프로그래밍 서적이나 튜토리얼을 읽는 것이 좋습니다. 조언을 해준 덕분에 –

답변

-1

을에서 const 어떻게 변환합니까

int i; 
int *ptrInt = &i;  // this doesn't need a cast 
char *ptrChar = (char*)&i; // this does need a cast 

이 경우 ptrChari의 "첫 번째"바이트를 가리 킵니다. 이 "첫 번째"바이트는 컴퓨터가 작은 엔디안 또는 큰 엔디안을 사용하는 경우 LSB 또는 MSB가 될 수 있습니다.

이러한 변환은 신중하게 사용해야하지만 저수준 개념이므로 매우 유용하므로 안전하지 않을 수 있습니다.

이제, 당신은 항상 직접 동일한 유형의 const를 포인터에 대한 포인터를 할당 할 수 있습니다 그래서

char c; 
char *pc = &c; 
const char *cpc = pc; 

, 마지막 예에서 const int *intFile = (const int*) ...

을 쓸 필요가 없다, const char *cpcc을 의미

*cpc = 'H'; // error 
cpc[0] = 'j'; // error 
+0

이것은 확실히 작동하지 않습니다 *. –

+0

제발, 설명해 주실 수 있습니다 ** ** 이것이 작동하지 않는 이유는 무엇입니까? – roy

+0

우선 int와 FILE은 완전히 다른 타입입니다. 'FILE' 구조체에 대한'int *'포인터 (도중에 불투명 함)는 완전히 무작위이며 아무 것도 쓸모가 없습니다 (잘못된 프로토 타입을 가지고있는 매우 특별한 함수를 제외하고'int *'를 다시 캐스팅합니다). 'FILE *'내부적으로, 이것은 보통으로 깨짐). 또한, C에서는'sizeof (int *) == sizeof (FILE *) '라는 보장이 없으므로 실제 캐스트가 유효하지 않을 수도 있습니다. –

관련 문제