#define MAKE_MAGIC_CODE(a,b,c,d) (a | (b<<8) | (c<<16) | (d<<24))
#define SYSCFG_MAGIC_CODE MAKE_MAGIC_CODE('A', 'E', 'B', 'C') // Config file magic code
#define NETWORK_MAGIC_CODE MAKE_MAGIC_CODE('A', 'E', 'B', 'N') // Network command magic code请问这三行代码是什么意思,转成C#要怎么写
#define SYSCFG_MAGIC_CODE MAKE_MAGIC_CODE('A', 'E', 'B', 'C') // Config file magic code
#define NETWORK_MAGIC_CODE MAKE_MAGIC_CODE('A', 'E', 'B', 'N') // Network command magic code请问这三行代码是什么意思,转成C#要怎么写
第二行和第三行是类型定义。没学过C语言的人伤不起,仅仅勉强看懂。
写错了,你别怪我。//此处数据类型未必准确
int MAKE_MAGIC_CODE(int a, int b, int c, int d)
{
return a | (b <<8) | (c << 16) | (d << 24);
}至于下面的那两个类型定义,C#不支持这种宏展开的定义方式,不知道怎么处理。
给你个建议,既然那两个数据传入的值是固定的,你就利用上面我写的那个函数计算出来,例如通过计算:
SYSCFG_MAGIC_CODE 的结果是:1128416577
直接定义
SYSCFG_MAGIC_CODE = 1128416577;
NETWORK_MAGIC_CODE = 1312965953;
C#里好像是不支持像C++那样的自定义数据类型,你使用struct定义吧。
这三个都是宏。
你把这个宏展开就可以了。
MAKE_MAGIC_CODE(a,b,c,d) (a | (b<<8) | (c<<16) | (d<<24))
他的意思是当解析器遇到 MAKE_MAGIC_CODE的调用就转成相应的代码。
比如
int a,b,c,d;
int e=MAKE_MAGIC_CODE(a,b,c,d);
这块c代码
解析器会把这个代码解析为
int e=(a | (b<<8) | (c<<16) | (d<<24));下面的两个也是类似。
虽然说可能得到的结果是一样的。不过有时候并一定对。
这里一面一个错误的列子。http://www.cnblogs.com/minhost/archive/2009/01/07/1370806.html
public UInt16 SYSCFG_MAGIC_CODE = (UInt16)(Convert.ToUInt16('A') | (Convert.ToUInt16('E') << 8) | (Convert.ToUInt16('B') << 16) | (Convert.ToUInt16('C') << 24));
对吗?