구조체 bitfield 선언시 엔디안 고려?

sound79의 이미지

비트필드로 선언된 구조체를 주고 받는 구조에서 엔디안을 고려해서 어떻게
처리를 해야 될지 고심이네요..

즉 다음과 같이 선언된 구조체가 있습니다.

 struct _bitfield_endian_t {
    unsigned int s1: 4;
    unsigned int s2: 4;
    unsigned int s3: 20;
    unsigned int s4: 3;
    unsigned int s5: 2;
    unsigned int s6: 3;
    unsigned int s7: 1;
    unsigned int s8: 3;
 }bitfield_endian_t;
 
 int input_buffer[5] = {0x11, 0x22, 0x33, 0x44, 0x55};
 bitfield_endian_t *endian = (bitfield_endian_t *)input_buffer;

즉 대략 위와 같은 형태로 처리되는 코드 구조를 가지고 있습니다.
실제는 소켓을 통해서 받은 데이터를 Big-endian기반의 시스템에서 처리할려고
하는데 기존 구현된 코드 베이스를 쉽게 처리하기 위해서입니다.

EBIT SWAP 등을 해보아도 원하는 형태로 만들기가 어렵네요.
간단히 위의 구조체를 little, big endian 어디에서도 같은 값을 유지하도록
할수가 없을까 입니다?..

감사합니다.

Hyun의 이미지

sound79의 이미지

EBIT와 같은 매크로를 통해서 bit를 re-ordering 해도 원하는 결과가 나오지 않는데요,
혹시 1, 2, 4와 같이 byte가 align이 되어야 되지 않나요?
===
블로그: http://sound79.tistory.com

Hyun의 이미지

실제 잘 동작하지 않는 결과를 보여주시면 이해하기가 쉬울 것 같네요.


나도 세벌식을 씁니다
ktd2004의 이미지

위 링크의 소스를 잘 보시면 답변에서 빠진 부분이 있습니다.
* BIG/LITTLE endian에 따라서 bit field의 선언을 뒤집어서 해야합니다.
* 접근할 때, little endian의 경우에는 byte swap을 시켜서 접근해야 합니다.

링크의 소스를 잘 보시면 두번째 내용(byte swap) 시키는 부분이 있습니다.

sound79의 이미지

소스를 잘 보지 않았네요.. byte swap부분을 보지 못했네요.
감사합니다.

===
블로그: http://sound79.tistory.com

댓글 달기

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