相关疑难解决方法(0)

[Flags]枚举属性在C#中意味着什么?

我不时会看到如下的枚举:

[Flags]
public enum Options 
{
    None    = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}
Run Code Online (Sandbox Code Playgroud)

我不明白[Flags]-attribute 到底是做什么的.

任何人都可以发布一个很好的解释或示例?

c# enums flags

1383
推荐指数
12
解决办法
46万
查看次数

将byte []转换为sbyte []

我试图将数组转换byte[]sbyte[].

这是我的示例数组:

byte[] unsigned = { 0x00, 0xFF, 0x1F, 0x8F, 0x80 };
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了:

sbyte[] signed = (sbyte[])((Array)unsigned);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.此操作后数组中没有值.

有人有更好的主意吗?

c# type-conversion

11
推荐指数
2
解决办法
1万
查看次数

C#中的C位字段

我需要将C结构转换为使用位字段的C#.

typedef struct foo  
{  
    unsigned int bar1 : 1;
    unsigned int bar2 : 2;
    unsigned int bar3 : 3;
    unsigned int bar4 : 4;
    unsigned int bar5 : 5;
    unsigned int bar6 : 6;
    unsigned int bar7 : 7;
    ...
    unsigned int bar32 : 32;
} foo;
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?

c c# bit-manipulation code-conversion

10
推荐指数
2
解决办法
6907
查看次数

使用C#中的位字段进行编组

是否可以将包含位字段的C风格结构编组到C#结构中,或者是否必须将其编组为基本类型然后执行位掩码?

例如,我想从这样的C风格结构编组:

struct rgb16 {
    unsigned int R : 4;
    unsigned int G : 5;
    unsigned int B : 4;
}
Run Code Online (Sandbox Code Playgroud)

并将其编组到这样的事情上:

[StructLayout(LayoutKind.Sequential)]
public struct Rgb16 {
    public byte R;
    public byte G;
    public byte B;
}
Run Code Online (Sandbox Code Playgroud)

c# marshalling bit-fields

3
推荐指数
1
解决办法
5301
查看次数

C# - 如何按声明顺序对Type.GetFields()返回的字段进行排序?

Type.GetFields()不按特定顺序返回字段,但我想按声明顺序对它们进行排序.我怎样才能做到这一点?我没有看到FieldInfo中的'index'属性或具有类似功能的任何东西.

动机:我想实现一个类似于本答案中的位域解决方案,但正如第二条评论所述,订单无法保证.

编辑:澄清 - 我不想创建此代码依赖此顺序.我想创建此代码来解析已经具有特定排序的现有二进制数据.


编辑2(回答后):我选择了一个完全回答问题的答案,并且在我的测试中正常工作,但是作为旁注,位域解决方案存在问题:

从位字段读取值时,您会得到一个无符号整数(某个大小),但是根据您在FieldInfo运行时获得的实际字段类型(byte,bool,int),您无法正确转换它.您可以使用运行时显式条件(if type.Equals(typeof(bool))等)来完成它,但这有点难看.

我最终使用C++/CLI,这使得这更加简单.

c# reflection

3
推荐指数
1
解决办法
1698
查看次数

如何将短片转换为bool []?

如何在C#中将短片转换为布尔数组(bool [])?我正在寻找一种算法,多种选择将受益于它们的优点和缺点.

因此,例如,如果我有一个短的= 132,即二进制10000100

所以我想要一个{false,false,true,false,false,false,false,true}的数组

bool[] ToArrayOfBool(short source)
{
    bool[] result = new bool[16];

    ///Do Some stuff here


    return result;
}
Run Code Online (Sandbox Code Playgroud)

c#

-3
推荐指数
1
解决办法
102
查看次数