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
[63282] Re:전송방식에 대해 문의드립니다
아제나 [azena] 905 읽음    2010-12-16 15:08
원하는대로 보내면 됩니다.

단, 받는 컴퓨터 프로그램도 반드시 같은 개발툴로 만들어야 합니다.

strcut a { char b, int c, short d; } e; 에서

e의 변수형에 따른 메모리는 7바이트지만, 실제 할당된 메모리 크기는 12바이트(c++빌더)를 차지합니다.

개발 언어마다 틀립니다.

data align 이라고 해서 컴파일러가 속도를 위해서

크기를 정렬하기 때문입니다.

이것은 컴파일러 옵션에서 조절할 수 있습니다.

같은 개발툴로 만들면 data align 규칙이 같기 때문에 문제 없이 받을 수 있습니다.

개발툴이 틀린 경우를 생각해서

#pragma pack(1);
struct ... 생략
#pragma pack();

이렇게 #pragma pack으로 묶어주면 실제 바이트 만큼만 메모리를 할당하고 전송도 실제 바이트 만큼만 합니다.

아니면 구조체를 설계할 때,

struct a { char b; char c; short d; int e; } f;

이렇게 4바이트 align이 맞게 맞추어서 만들면

f의 크기는 8바이트이고, 실제 메모리도 8바이트만 할당됩니다.

위의 모든 이야기는 C++빌더의 경우이고, 다른 컴파일러에서는 다른 결과값을 나타낼 수 있습니다.




질문 님이 쓰신 글 :
: 패킷 전송 시
: |헤더|패킷 데이터| 이런 형태로 보내는데
:
: 패킷 데이터를 보낼때 int타입과 char 타입을 섞어서 보냅니다
: 즉 구조체 안에 int, char 멤버변수가 있고 그 멤버변수 안에 값을
: 넣어서 전달하고 있는데요
:
:
: 패킷은 4byte단위로 보내야된다고 해서요
: 그럼 char 타입을 보낼땐 따로 4byte에 맞게 크기를 변경해 줘야하나요?

+ -

관련 글 리스트
63278 전송방식에 대해 문의드립니다 질문 782 2010/12/16
63282     Re:전송방식에 대해 문의드립니다 아제나 905 2010/12/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.