c++에서 binary 포멧 으로 저장한 파일을 Matlab에서 불러와야 할 일이 있었습니다.
구조체로 저장한 부분을 변수가 선언된 순서대로 변수 하나씩 꺼내는데,
결과가 원래 저장한 값과 다르더군요.
예를들면,
struct TEST{
short s;
int i;
double d;
};
TEST t;
t.s=2;
t.i=4;
t.d=8;
TMemoryStream *ms = new TMemoryStream;
ms->Write(&t,sizeof(TEST));
ms->Position=0;
short s;
int i;
double d;
ms->Read(&s,2);
ms->Read(&i,4);
ms->Read(&d,8);
Memo1->Lines->Add(s);
Memo1->Lines->Add(i);
Memo1->Lines->Add(d);
이와 같이 했더니 아래와 같은 결과가 나오더군요.
2
262144
0
조금 삽질을 하다보니
ms->Read(&s,2);
ms->Seek(2,soFromCurrent);
ms->Read(&i,4);
ms->Read(&d,8);
위 처럼 short 를 불러오고 2 바이트 옮긴 후 int 와 double 을 불러와야 정상적인 값을 얻을수 있었습니다.
짧게 요약을 하면..
struct TEST{
short s;
int i;
double d;
};
와 같은 구조체를 저장할 시
0123456789ABCDEF --> 메모리상 0~16까지의 공간(byte)
s_i___d_________ <-- 이렇게 저장될 줄 알았는데
s___i___d_______ <-- 이렇게 저장되어 있었더라..
는 말입니다.
왜 이럴까요?
또 이것 저것 실험을 하다보니
struct TEST{
int i;
double d;
short s;
};
이 처럼 double 형이 가운데 있을때는 TEST 구조체의 크기가 24바이트가 되더군요.
이건 또 왜이럴까요?
변수를 저장할 때 bit가 역순으로 저장 되는 것과 상관이 있을까요?
아시는 분은 답변 부탁드립니다.
|