타입 케스팅관련 문의드립니다.

ljh5569의 이미지

void Temp(unsigned char *pChar, unsigned short *pShort)
{
*pShort = *(unsigned short*)pChar;
return;
}

위 함수를 호출할대 파라미터 pChar의 값이 0x20000000일때와
0x20000001일때 pShort값이 같은데 이유가 뭔지 모르겠네요..;;;;
고수님들 도움 부탁드립니다. (- -)(_ _)(- -)

hkpco의 이미지

논리적으로 오류가 있는 코드이지만 이를 무시하고 설명드리면,

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/

enddl22의 이미지

0x20000000은 포인터형 변수에 저장될 수 있을것 같네요.

unsigned short든 unsigned int든 포인터형 변수는 4Byte로 할당되니까요.

intel machine에서.. sizeof 해보세요.

그리고 같은 값이 읽히는 이유는 align때문에 그런것 같네요.

기본적으로 intel 기반 머신이 32bit로 한번 읽어 올때 4byte식 읽어 오잖아요.. int든 char든.

그래서 20000000 이랑 20000001 이랑 결과 값이 같은거 아닐까요? 20000002는 값이 다를것 같네요..

아닌감??

hkpco의 이미지

일반 변수에 각각의 값들을 주고 함수 인자로 전달하는것으로 가정해버렸네요..ㅎㅎ

=============
박찬암 (hkpco)
http://hkpco.kr/

=============
박찬암 (hkpco)
http://hkpco.kr/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.