void CTESTDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
#pragma pack(push) //保存原对齐并设置新的字节对齐
#pragma pack(1)
typedef struct __TWarningCmd
{
BYTE StructVer; //结构体版本号,用于当该结构体不能满足要求时升级用
WORD NodeID; //节点ID
WORD WarningFlag; //0表示节点掉线,1表示节点电量低于警告值
//BYTE Reserved; //预留
//WORD WarningFlag2;
}WarningCmd,*PWarningCmd;
#pragma pack(pop) //恢复原字节对齐方式
PWarningCmd pWarning;
WarningCmd Warning;
pWarning = &Warning;
pWarning->StructVer = 10;
pWarning->NodeID = 4202;
pWarning->WarningFlag = 1234;
//int num;
//num = sizeof(*pWarning);
//BYTE* ch = (BYTE*)pWarning;
//num = strlen((char*)ch);
Test((BYTE*)pWarning);
}
bool CTESTDlg::Test(BYTE* pBuf)
{
int num;
num=0;
num = strlen((char*)pBuf);
return false;
}
这段代码运行后,Test()函数中的num结果为7,但如果是下面的代码:
void CTESTDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
#pragma pack(push) //保存原对齐并设置新的字节对齐
#pragma pack(1)
typedef struct __TWarningCmd
{
BYTE StructVer; //结构体版本号,用于当该结构体不能满足要求时升级用
WORD NodeID; //节点ID
WORD WarningFlag; //0表示节点掉线,1表示节点电量低于警告值
//BYTE Reserved; //预留
//WORD WarningFlag2;
}WarningCmd,*PWarningCmd;
#pragma pack(pop) //恢复原字节对齐方式
PWarningCmd pWarning;
WarningCmd Warning;
pWarning = &Warning;
pWarning->StructVer = 10;
pWarning->NodeID = 4202;
pWarning->WarningFlag = 1234;
int num;
//num = sizeof(*pWarning);
BYTE* ch = (BYTE*)pWarning;
num = strlen((char*)ch);
Test((BYTE*)pWarning);
}
bool CTESTDlg::Test(BYTE* pBuf)
{
int num;
num=0;
num = strlen((char*)pBuf);
return false;
}
运行这段代码后得:num的结果是5,这是怎么一回事,按理说num真正的值应该是5,不可能会出现7,
两段代码的区别就是把注视的代码打开了,希望各位指导一下
{
// TODO: 在此添加控件通知处理程序代码
#pragma pack(push) //保存原对齐并设置新的字节对齐
#pragma pack(1)
typedef struct __TWarningCmd
{
BYTE StructVer; //结构体版本号,用于当该结构体不能满足要求时升级用
WORD NodeID; //节点ID
WORD WarningFlag; //0表示节点掉线,1表示节点电量低于警告值
//BYTE Reserved; //预留
//WORD WarningFlag2;
}WarningCmd,*PWarningCmd;
#pragma pack(pop) //恢复原字节对齐方式
PWarningCmd pWarning;
WarningCmd Warning;
pWarning = &Warning;
pWarning->StructVer = 10;
pWarning->NodeID = 4202;
pWarning->WarningFlag = 1234;
//int num;
//num = sizeof(*pWarning);
//BYTE* ch = (BYTE*)pWarning;
//num = strlen((char*)ch);
Test((BYTE*)pWarning);
}
bool CTESTDlg::Test(BYTE* pBuf)
{
int num;
num=0;
num = strlen((char*)pBuf);
return false;
}
这段代码运行后,Test()函数中的num结果为7,但如果是下面的代码:
void CTESTDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
#pragma pack(push) //保存原对齐并设置新的字节对齐
#pragma pack(1)
typedef struct __TWarningCmd
{
BYTE StructVer; //结构体版本号,用于当该结构体不能满足要求时升级用
WORD NodeID; //节点ID
WORD WarningFlag; //0表示节点掉线,1表示节点电量低于警告值
//BYTE Reserved; //预留
//WORD WarningFlag2;
}WarningCmd,*PWarningCmd;
#pragma pack(pop) //恢复原字节对齐方式
PWarningCmd pWarning;
WarningCmd Warning;
pWarning = &Warning;
pWarning->StructVer = 10;
pWarning->NodeID = 4202;
pWarning->WarningFlag = 1234;
int num;
//num = sizeof(*pWarning);
BYTE* ch = (BYTE*)pWarning;
num = strlen((char*)ch);
Test((BYTE*)pWarning);
}
bool CTESTDlg::Test(BYTE* pBuf)
{
int num;
num=0;
num = strlen((char*)pBuf);
return false;
}
运行这段代码后得:num的结果是5,这是怎么一回事,按理说num真正的值应该是5,不可能会出现7,
两段代码的区别就是把注视的代码打开了,希望各位指导一下