프로그래밍 공부하는데 좀도와주세요 파일에서 원하는 bit수많큼의 데이터를 읽고 쓰는법이 있나요??
글쓴이: ko1205 / 작성시간: 화, 2007/01/09 - 5:39오후
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진수는 좌에서우로 자리수가 올라가지만 바이트단위의 자리수는 우에서 좌로 올라가서
그것도 못쓰고 어떻게 해야하나요????
Forums:
endian과 bit shift
endian과 bit shift 연산에 대해서 자료를 좀 찾아보시면 원하시는걸 할 수 있을것 같습니다. 자료는 인터넷 검색하면 많이 나올겁니다.
==================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
간단하게 4바이트
간단하게 4바이트 단위로 읽고 쓰게 하면 되겠네요.
4바이트를 읽어서 어떻게 구성되어있는 지 살펴보고 원하는 작업을 하고
쓸 때에도 4바이트 단위로 쓰고. ^^
비트 단위 연산을 공부하셔야 하겠네요.
일단 쓰는방식을 만들어보긴 했는데... 이런식으로 써도 될련지????
#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]);
}
질문 올려놓고 삽질 테스트 하면서 일단 원하는 방식으로 쓰여지긴 했는데...... 이런식으로 써도 되는건가요?????
댓글 달기