//struct
#pragma pack(2)
typedef struct link
{
int Start;
int Lenth;
unsigned char Target[17];
unsigned char Source[17];
int Message;
}exlink;
#pragma pack(pop)//赋值
                        link exlink;
exlink.Start = 0xFFFFFFFF;
exlink.Lenth = 2;
memcpy(exlink.Source,"great",strlen("great"));
memcpy(exlink.Target,"GREAT",strlen("GREAT"));
exlink.Message = 0x0a01;
//这种赋值是否正确么?断点的时候,exlink.Start值为-1,exlink.Message 为2561,都不是初始时赋的值,这是为什么?正常应该怎么赋值呢。
还有这接收方,这种结构体怎么解析还原数据呢?
求高手指点最后:这种“起始标识 4字节 0xFFFFFFFF”,应该怎样定义该数据类型呢,我定义的是否有误???

解决方案 »

  1.   

    4字节 0xFFFFFFFF ,那就用char sz[4]数组
      

  2.   

    怎么赋值呢:
    是直接sz = 0xFFFFFFFF;
      

  3.   

    你的赋值完全正确,但你的理解完全错误。注意int取值范围和进制转换。
      

  4.   


    说的是,确实我失误了,最后是进制转换的问题。 我是使用电脑上面的程序员计算器,在最下面除了进制选择外,还有个字字节选择,系统默认的是四字,但是开发工具上是以2字计算。除此之外,在赋值的时候
    //赋值
                link exlink;
    memset(&exlink,0,sizeof(exlink));//添加清空结构体缓存
                exlink.Start = 0xFFFFFFFF;
                exlink.Lenth = 2;
                memcpy(exlink.Source,"great",strlen("great"));
                memcpy(exlink.Target,"GREAT",strlen("GREAT"));
                exlink.Message = 0x0a01;
      

  5.   

    结构体中Start的最大值实际是7FFFFFFF.赋FFFFFFFF给它实际就是令它等于-1.
    而Message在转为十六进制2561就是0xa01
      

  6.   

    这种方法在我试过,sz = 0xFFFFFFFF是有误的,提示可修改的左值!