[완료] C++ 바이트 단위로 읽기
안녕하세요,
막 C++을 배우기 시작한 초보입니다.
아래는 예제코드입니다.
struct IMSI {
double a;
unsigned int b;
unsigned int c;
unsigned char d;
};
IMSI im;
와 같이 선언한 후에,
IMSI imsiro(char *pBuffer) {
IMSI imsiro;
im.a = *(double*)pBuffer;
im.b = *(unsigned int*)(pBuffer+8);
im.c = *(unsigned int*)(pBuffer+4);
im.d = *(unsigned int*)(pBuffer+12);
return im;
}
와 같은 함수를 정의했습니다.
int main()
{
FILE *pFile = fopen("file.file", "rb");
IMSI im;
char pBuffer[100];
fread(pBuffer, 17, 1, pFile);
printf("%08x : %f\n"), im.a, im.a);
printf("%04x : %u\n"), im.b, im.b);
printf("%04x : %u\n"), im.c, im.c);
printf("%01x : %c\n"), im.d, im.d);
return 0;
}
실행결과와 file.file의 16진수 버전을 보면서 맞추어 보는데,
유독 double 로 선언한 im.a 만 제대로 찍히지 않습니다.
처음 8 byte를 unsigned int 2개로 나뉘어 읽으면 똑같은 파일에 쓰여진 것과 동일한 16진수를 출력합니다.
8 byte는 제대로 읽고 지나가는 것 같은데 실행할 때마다 다른 16진수가 찍힙니다.
왜 그런지 아시는 분 도움을 부탁드립니다...
아래의 내용을 참고하세요
http://kldp.org/node/88468
구조체 크기를
구조체 크기를 찍어보니 pBuffer로 읽은것과 크기가 다르네요.
감사합니다.
그런데 읽은 것은 버퍼단위로 직접 읽어서 변수에 담았는데요.
그럼, 값은 제대로 저장이 되어야 한다고 생각이 드는데,
4byte 씩 두번 읽으면 제대로 들어가고
8byte 를 한번에 읽으면 제대로 안들어 가는 것은 왜 그럴까요..
읽을 때 바이트단위로 직접 읽어 미리 선언해 둔 구조체에 저장했습니다.
그래서 패딩에 의한 문제는 아닐것 같다는 생각이 듭니다.
댓글 달기