首页 新闻 会员 周边 捐助

怎么把这个结构翻译成c#的结构

0
悬赏园豆:30 [待解决问题]

typedef struct _FRAMEINFO {
 unsigned int FrameNo : 30;
 unsigned int FrameType:2;
}FRAMEINFO;

李春雷的主页 李春雷 | 初学一级 | 园豆:200
提问于:2010-11-28 12:42
< >
分享
所有回答(3)
0

C#语言中本身就有结构的,

unsigned int是C语言中16位无符号的整形,在C#中没有这样的,你可以使用int代替。参考代码如下:

 

 public struct Test
        {
            int FrameNo;
            int FrameType;

            public Test()
            {
                FrameNo = 2;
                FrameType = 2;
            }
        }

Alexis | 园豆:360 (菜鸟二级) | 2010-11-28 14:14
在c#中可以用uint16来代替,C#中结构体是不允许有无参的构造函数的
支持(0) 反对(0) 李春雷 | 园豆:200 (初学一级) | 2010-11-28 20:39
0

   跟你讲讲的我思路

首先我会想到这样:

    struct FrameInfo
    {
        uint FrameNo =30u;
        uint FrameType =2u;
    }

可惜编译器会报错:结构体中不能包含实例字段初始化器

 

然后我在这样:

    struct FrameInfo
    {
        uint FrameNo;
        uint FrameType;

        public FrameInfo()
        {
            FrameNo = 30u;
            FrameType = 2u;
        }
    }

编译器也会报错:结构体不能包含显式的无参构造器

 

其实应该这样,用类:

    [System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)]
    class FrameInfo
    {
        uint FrameNo = 30u;
        uint FrameType = 2u;
    }

要提醒你的是,在C/C++中传递该结构可能是按指针传递。

在C#中你直接按默认方式,也就是按值传递就行了,因为class已是引用类型

cyclone_dll | 园豆:320 (菜鸟二级) | 2010-11-28 14:17
可能你对C和C++不太了解其中的30和2是30位和2位,既bit,而不是赋初值
支持(0) 反对(0) 李春雷 | 园豆:200 (初学一级) | 2010-11-28 20:40
抱歉 我把:看成=了 :( http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/66643e47-5201-47c4-aa88-3c0bd78e5d3d 你看看这篇能不能帮到你
支持(0) 反对(0) cyclone_dll | 园豆:320 (菜鸟二级) | 2010-11-28 21:29
0

问题很不好回答,要专业的知识。

 

 

 

 

 

------------------------------------------------------------

小升初英语
小红姐 | 园豆:205 (菜鸟二级) | 2010-11-29 10:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册