void Temp(unsigned char *pChar, unsigned short *pShort) { *pShort = *(unsigned short*)pChar; return; }
위 함수를 호출할대 파라미터 pChar의 값이 0x20000000일때와 0x20000001일때 pShort값이 같은데 이유가 뭔지 모르겠네요..;;;; 고수님들 도움 부탁드립니다. (- -)(_ _)(- -)
논리적으로 오류가 있는 코드이지만 이를 무시하고 설명드리면,
32bit 시스템으로 가정했을 때, 0x20000000과 0x20000001은 둘 다 short형의 변수에 저장될 수 없습니다. (unsigned short - 2byte),(0x20000000,0x20000001 - 4byte)
그래서 정수형 오버플로가 일어나게 되는데 0xabcdefgh가 있을 경우 리틀 엔디안 방식으로 따지면, 0xgh, 0xef, 0xcd, 0xab 순으로 들어가게 됩니다.(즉, 하위 바이트부터)
이 때, 각각의 값을 short형 변수에 대입한다고 가정하면 일반적으로 32bit 시스템의 리틀 엔디안 방식에서 0x0000, 0x0001가 저장되게 되므로
각각의 값이 달라지는 것입니다.(첫 번째는 0, 두 번째는 1)
============= 박찬암 (hkpco)http://hkpco.kr/
0x20000000은 포인터형 변수에 저장될 수 있을것 같네요.
unsigned short든 unsigned int든 포인터형 변수는 4Byte로 할당되니까요.
intel machine에서.. sizeof 해보세요.
그리고 같은 값이 읽히는 이유는 align때문에 그런것 같네요.
기본적으로 intel 기반 머신이 32bit로 한번 읽어 올때 4byte식 읽어 오잖아요.. int든 char든.
그래서 20000000 이랑 20000001 이랑 결과 값이 같은거 아닐까요? 20000002는 값이 다를것 같네요..
아닌감??
일반 변수에 각각의 값들을 주고 함수 인자로 전달하는것으로 가정해버렸네요..ㅎㅎ
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
논리적으로 오류가
논리적으로 오류가 있는 코드이지만 이를 무시하고 설명드리면,
32bit 시스템으로 가정했을 때, 0x20000000과 0x20000001은 둘 다 short형의 변수에 저장될 수 없습니다.
(unsigned short - 2byte),(0x20000000,0x20000001 - 4byte)
그래서 정수형 오버플로가 일어나게 되는데 0xabcdefgh가 있을 경우 리틀 엔디안 방식으로 따지면,
0xgh, 0xef, 0xcd, 0xab 순으로 들어가게 됩니다.(즉, 하위 바이트부터)
이 때, 각각의 값을 short형 변수에 대입한다고 가정하면 일반적으로 32bit 시스템의 리틀 엔디안 방식에서 0x0000, 0x0001가 저장되게 되므로
각각의 값이 달라지는 것입니다.(첫 번째는 0, 두 번째는 1)
=============
박찬암 (hkpco)
http://hkpco.kr/
=============
박찬암 (hkpco)
http://hkpco.kr/
제생각은...
0x20000000은 포인터형 변수에 저장될 수 있을것 같네요.
unsigned short든 unsigned int든 포인터형 변수는 4Byte로 할당되니까요.
intel machine에서.. sizeof 해보세요.
그리고 같은 값이 읽히는 이유는 align때문에 그런것 같네요.
기본적으로 intel 기반 머신이 32bit로 한번 읽어 올때 4byte식 읽어 오잖아요.. int든 char든.
그래서 20000000 이랑 20000001 이랑 결과 값이 같은거 아닐까요? 20000002는 값이 다를것 같네요..
아닌감??
일반 변수에 각각의
일반 변수에 각각의 값들을 주고 함수 인자로 전달하는것으로 가정해버렸네요..ㅎㅎ
=============
박찬암 (hkpco)
http://hkpco.kr/
=============
박찬암 (hkpco)
http://hkpco.kr/
댓글 달기