리틀엔디안에 관계된 문제로 사료됩니다.. 하지만 이해가 안됩니다..

나빌레라의 이미지

리틀엔디안 : 바이트열의 작은 쪽이 앞에 저장
빅엔디안 : 바이트열의 큰 쪽이 앞에 저장

하지만 비트 스트림은 빅엔디안 유지.

그래서 4F20 이

빅엔디안으로 들어가면 4F20 고대로 리틀엔디안으로 들어가면 204F 로 들어감.

=======

제가 알고 있는 빅 엔디안과 리틀엔디안에 대한 지식은 여기 까지 입니다.

그럼 4F203E 가 있을 경우

빅엔디안: 4F203E
리틀엔디안: 3E204F

이 맞습니까?

그리고 뭔가를 만들다가 생긴 현상이 왠지 또 이놈의 엔디안 순서와 관련된것 같아서요..

인텔 머신입니다. (리틀엔디안이죠..)

에서, C 로 만든 프로그램입니다.

char 형 배열에 1byte 씩 일련의 값을 순서대로 써 넣었습니다.

unsigned char a[1000] = {0};

이라고 했을때
a[0] =0x17;
a[1] =0x20;
a[2] =0x27;
a[3] =0x4B;
a[4] =0x10;
a[5] =0x30;
:
:
뭐 이런식으로 아주 많이 들어갑니다.

이걸 프로그램상에서 for (i=0; i < a의 길이;i++) print a[i]; 로 찍으면

17 20 27 4B 10 30 (출력결과는 16진수로 나온다고 할때)

로 잘 나옵니다.

하지만 a 배열 자체를 fwrite 등으로 파일에 쓰고 나서, 해당 파일을 od 나 hexdump 등으로 덤프하면

2017 4b27 3010

이렇게 2바이트씩 짝을 이뤄 바이트 순서가 바뀌어 나옵니다.

메모리에 쓰는것 자체를 1바이트 단위로 했는데 어찌 하여 2바이트씩 짝을 이뤄 앞뒤가 바뀌어 나오는 걸까요?

분명 리틀엔디안때문인것 같긴한데.. 왜 2바이트씩 묶어서 저리 나오는지는 모르겠습니다.

차라리 4바이트 단위로 저렇게 나와 버리면 32비트 머신이라 그런가? 뭐 이런 얼토당토 않은 추측이라도 해보겠으나...

혹은 엔디안 문제가 아닌건가요?

아.. 궁금합니다...

고수 분들의 많은 가르침 부탁 드립니다.

mithrandir의 이미지

우선, 0x004F203E 를 32bit 자료라고 가정한다면
3E204F00 이 됩니다.
0x01이 16bit라면 0x0100이지만 32bit라면 0x01000000 인거죠.

그리고 두번째의 경우, hexdump나 od가 2byte씩 보여주면서 자동으로 endian변환을 하게 됩니다.
그걸 byte array라고 보지 않고, 2byte int 씩 끊어서 보여주는거죠.

hexdump -C 옵션을 사용해보면 정상적으로 나타나는것을 알 수 있습니다.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.