배열에서 단일 산술 형식으로 단일 항목을 캐스팅 (또는 심지어는 역 참조)하는 이상한 동작이 있습니다. Heres는 감소 된 테스트 케이스배열의 내용을 C에서 산술 형식으로 캐스팅
는 :
*((unsigned short *)(&test2[1]))
좀 다른 플랫폼 (PIC24 같은 주로 임베디드 플랫폼)에 액세스 위반을 받고 있어요 : 상세
void test1()
{
unsigned char test[10] = {0};
unsigned long i=0xffffffff;
*((unsigned long *)(&test[3])) = i;
int it;
for (it = 0 ; it < 10 ; it++)
{
printf("%02x ", test[it]);
}
}
void test2()
{
unsigned char test[10] = {0};
unsigned char test2[10] = {0};
test[2]=0xFF;
test[3]=0xFF;
*((unsigned short *)(&test2[1])) = *((unsigned short *)(&test[2]));
int it;
for (it = 0 ; it < 10 ; it++)
{
printf("%02x ", test2[it]);
}
}
는 주로이 표현입니다.
제 질문은이 C 준수 여부입니까? 나는 C 표준 내에서 아무것도 찾을 수 없지만 아마도 나는 장님 일뿐입니다.
이러한 캐스트 (루프 바이트 - 바이트 복사/언 롤링 등은 의미하지 않음)없이이 작업을 수행하는 다른 방법을 알고 있습니까? 플랫폼의 현재 바이트 순서를 알 필요가없는 위치는 어디입니까?
감사합니다.
걱정하지 마세요.하지만 때로는 이상한 일을해야 할 때가 있습니다. C가 당신에게 해줄 수있는 좋은 일입니다. 필자가 보통 그런 식으로'유니온 (union) '을 선호하지만 포인터 캐스트보다 훨씬 깔끔한 솔루션입니다. – cha0site