프로그래밍 공부하는데 좀도와주세요 파일에서 원하는 bit수많큼의 데이터를 읽고 쓰는법이 있나요??

ko1205의 이미지

8bit 나 16bit같은 데이터를 읽고 쓰는건 알겠는데..

만약 데이터가 10bit나 5bit 같이 4의배수가 아닌 연속되는 데이터가 있다면 어떻게 읽어 들이고 다시 쓰여지는지 알수가 없습니다... ㅜ.ㅜ

인터넷이랑 책을 찾아봤더니 비트필드라는걸 이용하면 될꺼 같아서 테스트를 해봤는데 제가 원하는 계념하고는 좀들리더군요..

이미지 포멧중에 10bit 포멧의 데이터가 있는데..

hex edit로 열어봤더니 헤더부분 다음에 바로 한픽셀당 4byte씩 10bit 단위로 RGB 3체널이 순차적으로 들어있거든요..

만약 완전 Red데이터면 "ff c0 00 00" Green데이터면 "00 3f c0 00" blue데이터면 "00 00 0f fc" 이런 식으로 들어있는데...

이걸 읽고 쓸려면 어떻게 해야하나요???

RGB전체 데이터를 묶어서 32bit 형으로 써볼까 해서 해봤더니 ...

hex edit에서 확인해보니 데이터가 1바이트 안에서는 2진수는 좌에서우로 자리수가 올라가지만 바이트단위의 자리수는 우에서 좌로 올라가서

그것도 못쓰고 어떻게 해야하나요????

superkkt의 이미지

endian과 bit shift 연산에 대해서 자료를 좀 찾아보시면 원하시는걸 할 수 있을것 같습니다. 자료는 인터넷 검색하면 많이 나올겁니다.

==================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

익명사용자의 이미지

간단하게 4바이트 단위로 읽고 쓰게 하면 되겠네요.
4바이트를 읽어서 어떻게 구성되어있는 지 살펴보고 원하는 작업을 하고
쓸 때에도 4바이트 단위로 쓰고. ^^
비트 단위 연산을 공부하셔야 하겠네요.

ko1205의 이미지

#include

main()
{
FILE *fp;
fp = fopen("test_temp","w");
typedef struct Mybit{
unsigned int a:10;
unsigned int b:10;
unsigned int c:10;
} my10bit;
unsigned int RGB;
unsigned char data[4];
my10bit choi;
choi.a=0;
choi.b=0;
choi.c=1023;
data[0]= choi.a/4;
data[1]= (choi.a%4)*0x40+(choi.b/16);
data[2]=(choi.b%16)*0x10+(choi.c/0x40);
data[3]=(choi.c%0x40)*4;
fwrite(&data,sizeof(unsigned int),1,fp);
fclose(fp);
printf("%d\n",choi.a);
printf("%d\n",sizeof(unsigned int));
printf("%d\n",sizeof(my10bit));
printf("%d\n",RGB);
printf("%d\n",data[1]);

}

질문 올려놓고 삽질 테스트 하면서 일단 원하는 방식으로 쓰여지긴 했는데...... 이런식으로 써도 되는건가요?????

댓글 달기

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