C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71543] 변수를 선언하는 순서에 따른 구조체 저장 방식(?)에 대한 질문
빌더초보 [] 3386 읽음    2014-07-11 20:46
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가 역순으로 저장 되는 것과 상관이 있을까요?



아시는 분은 답변 부탁드립니다.

+ -

관련 글 리스트
71543 변수를 선언하는 순서에 따른 구조체 저장 방식(?)에 대한 질문 빌더초보 3386 2014/07/11
71546     Re:변수를 선언하는 순서에 따른 구조체 저장 방식(?)에 대한 질문 3419 2014/07/12
71548         Re:Re:변수를 선언하는 순서에 따른 구조체 저장 방식(?)에 대한 질문 빌더초보 3303 2014/07/12
71549             Re:Re:Re:변수를 선언하는 순서에 따른 구조체 저장 방식(?)에 대한 질문 송신영 3168 2014/07/12
71553                 Re:Re:Re:Re:변수를 선언하는 순서에 따른 구조체 저장 방식(?)에 대한 질문 빌더초보 3563 2014/07/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.