#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#要怎么写

解决方案 »

  1.   

    第一行是宏定义。
    第二行和第三行是类型定义。没学过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定义吧。
      

  2.   

    上面两位好象说的有点问题。
    这三个都是宏。
    你把这个宏展开就可以了。
    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));下面的两个也是类似。
      

  3.   

    好象三楼的不对。三楼的直接写成函数了。而不是#define的展开。
    虽然说可能得到的结果是一样的。不过有时候并一定对。
    这里一面一个错误的列子。http://www.cnblogs.com/minhost/archive/2009/01/07/1370806.html
      

  4.   

    感谢楼上各位,我看到有人说可以这么写 
    public UInt16 SYSCFG_MAGIC_CODE = (UInt16)(Convert.ToUInt16('A') | (Convert.ToUInt16('E') << 8) | (Convert.ToUInt16('B') << 16) | (Convert.ToUInt16('C') << 24));
    对吗?