C++结构体转C# c++结构c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 结构体:// 时间定义typedef struct _ZLNET_DEVTIME{ DWORD second :6; // 秒 1-60 DWORD minute :6; // 分 1-60 DWORD hour :5; // 时 1-24 DWORD day :5; // 日 1-31 DWORD month :4; // 月 1-12 DWORD year :6; // 年 2000-2063 } 那个结构占一个int型(32位)的空间,前6位是秒,后面6位是分,之后分别是时天月年 加起来刚好32位struct MyBitField { private uint data; public byte aa { get { return data & 0x03; } set { data = (data & ~ 0x03) | (value & 0x03); } } public ushort bb { get { return (data >> 3) & 0x0FFF; } set { data = (data & ~ 0x00007FFC) | ((value & 0x0FFF) << 3; } } public ushort bb { get { return (data >> 15) & 0x0FFF; } set { data = (data & ~ 0x3FFF8000) | ((value & 0x0FFF) << 15; } }}http://www.codeproject.com/Questions/276153/help-for-bit-field-in-csharp C/C++中,WORD占2个字节,DWORD占4个字节。这个结构体定义本身并不是规范,可以把年月日时分秒全部用byte变量(8位无符号整数,占1字节)。或者使用C# 的标准时间变量DateTime。或者如6楼一样使用位操作进行转换。 6楼的方法不错,冒号后面的数字是指这个元素占几个bit位,DWORD是32位的,把那些数字加起来正好是32位。 public struct _ZLNET_DEVTIME{ int second; // 秒 1-60 int minute; // 分 1-60 int hour ; // 时 1-24 int day ; // 日 1-31 int month ; // 月 1-12 int year ; // 年 2000-2063 } :号后面的数字表示他要使用的二进制位数, 在C#里不用Care 写个类字段一样,加个方法,移位运算后或起来组成一个 32bit 的整数返回。int getDWORD(){ return (year & 0x6 << 26) | (month & 4 << 22 ) ... ... //全部|起来,组成一个 DWORD类型整数。} 如何用C#代码对网页进行操作?? inno setup安装包问题 变量类型与实例类型之间的区别 请问那位能介绍一下ManageDirectX xmltextreader和xmldomcument的速度比较 ASP.NET程序放在WindowsXP上,其他机器无法访问,大家有没有办法? (winFrom)求类似Microsoft Visual Studio .NET 2003 文档中的索引功能的解决思路 自编程序的一个奇怪现象,费解!!! 怎样用C#动态创建ODBC数据源(DSN) 难题 请问怎么抓这个 Session 内的值 用C#编写一个简单的上位机串口
typedef struct _ZLNET_DEVTIME
{
DWORD second :6; // 秒 1-60
DWORD minute :6; // 分 1-60
DWORD hour :5; // 时 1-24
DWORD day :5; // 日 1-31
DWORD month :4; // 月 1-12
DWORD year :6; // 年 2000-2063
}
前6位是秒,后面6位是分,之后分别是时天月年
加起来刚好32位struct MyBitField {
private uint data;
public byte aa { get { return data & 0x03; } set { data = (data & ~ 0x03) | (value & 0x03); } }
public ushort bb { get { return (data >> 3) & 0x0FFF; } set { data = (data & ~ 0x00007FFC) | ((value & 0x0FFF) << 3; } }
public ushort bb { get { return (data >> 15) & 0x0FFF; } set { data = (data & ~ 0x3FFF8000) | ((value & 0x0FFF) << 15; } }
}http://www.codeproject.com/Questions/276153/help-for-bit-field-in-csharp
或者如6楼一样使用位操作进行转换。
public struct _ZLNET_DEVTIME
{
int second; // 秒 1-60
int minute; // 分 1-60
int hour ; // 时 1-24
int day ; // 日 1-31
int month ; // 月 1-12
int year ; // 年 2000-2063
}
:号后面的数字表示他要使用的二进制位数, 在C#里不用Care
return (year & 0x6 << 26) | (month & 4 << 22 ) ... ... //全部|起来,组成一个 DWORD类型整数。
}