首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

结构体中byte类型数据的长度会变化?解决思路

2012-03-05 
结构体中byte类型数据的长度会变化?遇到一个问题:publicunsafestructtestStruct{//publicfixedcharName[5]

结构体中byte类型数据的长度会变化?
遇到一个问题:
        public   unsafe   struct   testStruct
        {
//                 public   fixed   char   Name[5];
                public   byte   Type;
//                 public   uint   ID;
//                 public   ushort   Value;
        };
int   size=sizeof(testStruct);
此时size=1;

        public   unsafe   struct   testStruct
        {
//                 public   fixed   char   Name[5];
                public   byte   Type;
//                 public   uint   ID;
                public   ushort   Value;
        };
int   size=sizeof(testStruct);
此时size=4;

        public   unsafe   struct   testStruct
        {
//                 public   fixed   char   Name[5];
                public   byte   Type;
                public   uint   ID;
//                 public   ushort   Value;
        };
int   size=sizeof(testStruct);
此时size=8;

        public   unsafe   struct   testStruct
        {
                public   fixed   char   Name[5];
                public   byte   Type;
//                 public   uint   ID;
//                 public   ushort   Value;
        };
int   size=sizeof(testStruct);
此时size=12;

请教各位这是怎么回事?byte的长度能变化?怎么样才能使它总为1呢?
谢谢!



[解决办法]
public unsafe struct testStruct
{
// public fixed char Name[5];
public byte Type;
// public uint ID;
// public ushort Value;
};
只有byte,因此为1
public unsafe struct testStruct
{
// public fixed char Name[5];
public byte Type;
// public uint ID;
public ushort Value;
};
byte和ushort,产生补位.在byte后会再加一位,使ushort的地址能被2整除.因此为4.
其它雷同,
public unsafe struct testStruct
{
// public fixed char Name[5];
public byte Type;
public uint ID;
// public ushort Value;
};
会在byte后补3位,使unit的地址能被4整除.

public unsafe struct testStruct
{
public fixed char Name[5];
public byte Type;
// public uint ID;
// public ushort Value;
};
这个不太清楚,呵呵
byte一直是1,你这些情况只是struct的对齐问题.LZ可以看看相关的知识

热点排行