typedef struct _USER_TYPE_STRUCT
{
UINT8 Power: 4; /*User Privilege */
UINT8 TempFlg: 1; /*Reserve*/
UINT8 DuressFlg: 1; /*Reserve*/
UINT8 Reserve: 2; /*Reserve*/
} USER_TYPE;
用sizeof(USER_TYPE)测试结果为1;
下面是我自己的转换成C#的代码:
[StructLayout(LayoutKind.Explicit)]
public struct USER_TYPE
{
[FieldOffset(0)]
byte Power; /*User Privilege */
[FieldOffset(4)]
byte TempFlg; /*Reserve*/
[FieldOffset(5)]
byte DuressFlg; /*Reserve*/
[FieldOffset(6)]
byte Reserve;// 2; /*Reserve*/
}
用Marshal.SizeOf测试结果为7,明显不对啊。
求真相!!!!谢谢!
7 个解决方案
#1
我记得fieldoffset是以字节为单位
#2
关于union 封送,msdn上有详细的解释
#3
那有没有不是以字节为单位的关键字呀???
#4
不一定要用fileoffset
只要你能通过C#控制这个结构的尺寸,就可以调用
只要你能通过C#控制这个结构的尺寸,就可以调用
#5
C#里貌似是这样
[Flags]
enum _USER_TYPE_ENUM
{
Power=0x1,
TempFlg=0x10,
DuressFlg=0x20,
Reserve=0x40
}
struct USER_TYPE
{
_USER_TYPE_ENUM userType;
}
#6
错了,应该是
[Flags]
enum _USER_TYPE_ENUM
{
Power=0xF,
TempFlg=0x10,
DuressFlg=0x20,
Reserve=0xC0
}
struct USER_TYPE
{
_USER_TYPE_ENUM userType;
}
#7
问题解决了吗?
#1
我记得fieldoffset是以字节为单位
#2
关于union 封送,msdn上有详细的解释
#3
那有没有不是以字节为单位的关键字呀???
#4
不一定要用fileoffset
只要你能通过C#控制这个结构的尺寸,就可以调用
只要你能通过C#控制这个结构的尺寸,就可以调用
#5
C#里貌似是这样
[Flags]
enum _USER_TYPE_ENUM
{
Power=0x1,
TempFlg=0x10,
DuressFlg=0x20,
Reserve=0x40
}
struct USER_TYPE
{
_USER_TYPE_ENUM userType;
}
#6
错了,应该是
[Flags]
enum _USER_TYPE_ENUM
{
Power=0xF,
TempFlg=0x10,
DuressFlg=0x20,
Reserve=0xC0
}
struct USER_TYPE
{
_USER_TYPE_ENUM userType;
}
#7
问题解决了吗?