一、结构体,枚举,共用体
1、结构体的定义,结构体类似数组,一段连续的地址空间,定义后,空间大小不可更改,但是比数组不同的是,结构体数据类型,可以都不一样,可以定义任何类型,嵌套各种指针。
struct pnode {
unsigned int sn;
NODEINFO nodeinfo;
BOOL loop;
struct pnode *next;
struct pnode *previous;
};
typedef struct {
// typedef 重命名一个结构体类型,结构体大多数是这么用,
struct pnode *head;
struct pnode *tail;
struct pnode *cur;
WORD mode;
WORD MaxFile;
} list_info ,*_p_list_info ;
list_info my_list_info ; //定义一个list_info 类型的 结构体
_p_list_info p_list_info; //定义一个结构体指针
p_list_info = &my_list_info; //指向这个结构体
结构体赋值,结构体数组,成员赋值
typedef struct {
WORD menu_id;
const WORD* icon;
BYTE val;
next_menu next;
menu_title title;
BOOL corr_sys_paras;
}menu_format;
menu_format const menu_app_photocap[] = {
//在定义结构体变量时,可以这样全部成员赋值
{
.menu_id = MENU_ID_PHOTOCAP_SET,
.icon = (WORD*)IconMenuPhotoCap,
.next.menu = menu_photocap_item,
.next.menu_size = sizeof(menu_photocap_item)/sizeof(menu_recorder_item[0]),
.title.icon_str_id = ICON_ST_PHOTOCAP,
},
{
.menu_id = MENU_ID_SYS_SET,
.icon = (WORD*)IconMenuSetup,
.next.menu = menu_sys_item,
.next.menu_size = sizeof(menu_sys_item)/sizeof(menu_sys_item[0]),
.title.icon_str_id = ICON_ST_SYS_SET,
},
};
在定义结构体变量时,可以这样全部成员赋值,和数组一样,定义后,使用时,不能全部一起赋值,需要一个一个成员赋值,a[1] = b[1],
SX_S8 * pszSendBuf = (SX_S8 *)malloc( UDP_MAX_LEN );//申请一大段内存
memset(pszSendBuf,0,UDP_MAX_LEN);
PT_DataPkt_1 pkt = (PT_DataPkt_1)(pszSendBuf); //将这段内存,强制类型转换成结构体类型,按结构体来解析
pkt->u32Sync = PKT_SYNC;
pkt->u8Cmd = CMD_ACK_BIT1;
pkt->u32DataLen = sizeof(T_BIT_1);
pkt->u32totalPktNum = 1;
pkt->u32currretPkt = 1;
pkt->CRC32 = 0xC4C3C2C1;
//file data
memset((SX_U8 *)(&pkt->BITData), 0, sizeof(T_BIT_1) );
pkt->BITData.u8head = 12;
pkt->BITData.u8SoftwareRev = (SX_U8)software_reversion;
pkt->BITData.u8reserv0 = 0;
pkt->BITData.u8reserv1 = 0;
pkt->BITData.u8devicetype = (SX_U8)U8DeviceType;
pkt->BITData.u8devicestatus = (SX_U8)client_fpga_status;
pkt->BITData.u16packnum = u16packnum;
memset( pkt->BITData.u8reserver2, 0, sizeof(pkt->BITData.u8reserver2) );
ret = Bit_Server_Send1(handle->ptClientBIT1, (SX_S8 *)pkt, sizeof(T_DataPkt_1));//将结构体,类型强制成一个字节,通过网络发送出去,发送字符时,都一个一个字节传送,对方收到时,用结构体类型,解析,就可以还原了
SX_S32 Bit_Server_Send1(PT_CLIENT handle, void *buf, SX_S32 len)
{
if( handle == NULL || len <= 0 || len > UDP_MAX_LEN )
{
TRACE(DL_ERROR, "DL_ERROR\n");
return 0;
}
SX_S32 length;
if( buf )
{
length = MIN(len, UDP_MAX_LEN);
return sendto( handle->sockfd, (const SX_S8 *)buf, length


4543

被折叠的 条评论
为什么被折叠?



