가 변 장 구조 체
1703 단어 구조 체
typedef struct stru_tcp_server_msg
{
uint32_ msgLength; // , msgLength
uint32_ returnCode; // TcpServer
uint8_ zmqMsgBody[0]; //
}TS_TCP_SERVER_MSG;
위의 zmqMsgBody [0] 의 정 의 를 보면 이상 하 게 보이 지만 사실은 그 역할 은 바로 이 구조 체 의 끝 을 가리 키 는 것 입 니 다. 그 는 어떻게 사용 합 니까?
typedef struct stru_zmq_server_msg
{
uint32_ deviceId;
uint32_ msgCode;
}TS_ZMQ_SERVER_MSG;
int len = sizeof(TS_TCP_SERVER_MSG) +
sizeof(TS_ZMQ_SERVER_MSG);
TS_TCP_SERVER_MSG* tdata = (TS_TCP_SERVER_MSG*)malloc(len);
tdata->msgLength = len;
tdata->returnCode = 0;
TS_ZMQ_SERVER_MSG* data = (TS_ZMQ_SERVER_MSG*)tdata->zmqMsgBody;
data->deviceId = 100;
data->msgCode = TS_DEVICE_CONFIG_REQ_MSG;
그렇습니다. malloc 하나의 size of (TS TCP SERVER MSG) + sizeof (TS ZMQ SERVER MSG) 길이 의 데이터 블록 을 사용 하면 됩 니 다. 예 를 들 어 상기 코드 tdata - > zmqMsgBody 가 가리 키 는 것 은 TS 입 니 다.TCP_SERVER_MSG 구조 체 의 꼬리 위치, 즉 TSZMQ_SERVER_MSG 의 첫 번 째 위치.
또 하 나 는 zmqMsgBody [0] 라 는 정의 가 있 는 컴 파일 러 가 컴 파일 되 지 않 고 해결 방법 은 zmqMsgBody [1] 로 간단하게 바 꾸 면 된다 는 것 이다.그러나 sizeof 의 크기 가 zmqMsgBody [0] 를 바 꿀 때 이 항목 은 구조 체 길이 에 포함 되 지 않 지만 zmqMsgBody [1] 는 이 항목 의 길 이 를 구조 체 길이 에 추가 한 다음 에 바이트 보완 (1 바이트 정렬 시 보완 이 필요 없 음), 예 를 들 어 TSTCP_SERVER_MSG 구조 체
[0] 시: size of (TS TCP SERVER MSG) = 8
[1] 시: size of (TS TCP SERVER MSG) = 8 + 1 + 3 = 12 //3 바이트 보충