如何将字节操作转换为C#?

时间:2013-11-19 07:56:49

标签: c# c++

我想将此特定代码从C ++转换为C#。有没有办法做到这一点?

   struct WORD_ENCR
   {
         unsigned part1 : 5;
         unsigned part2 : 4;
         unsigned part3 : 23;


         WORD_ENCR& operator =(const DWORD &a) {
                *((DWORD*) this) = a;
                return* this;
         };

   };

   DWORD wKey = 63787
   WORD_ENCR    wsResult;
   wsResult = wKey;

   unsigned int part1 = wsResult.part1;
   unsigned int part2 = wsResult.part2;
   unsigned int part3 = wsResult.part3;

你知道如何在C#中重现它吗?

感谢您的帮助。


编辑:

非常感谢您的回复。

  • part1,part2和part3已初始化。
  • DWORD是一个32位无符号整数。

我需要在C#中重现的是:

Decimal : 63787
Hexadecimal : F9 2B
Binary : 0000 0000 0000 0000 1111 1001 0010 1011

会给:

part1 : 1111 100
part2 : 1 001
part3 : 0 1011

最后:

Part1   0111 1100   7C  124
Part2   0000 1001   9   9
Part3   0000 1011   B   11

我需要的是124,9和11。

我怎样才能在C#中做到这一点?

1 个答案:

答案 0 :(得分:0)

C#没有位字段。 CLR也没有。因此,您需要手动执行C编译器为您执行的操作:使用位级操作提取位。

uint input = ...;
var part1 = input >> (4+23) & 0x1F;
var part2 = input >> (23) & 0xF;
var part3 = input >> (0) & appropriateMaskWith23OnesHere;

我希望我得到正确的顺序,我不是一个优秀的C开发人员。

顺便说一下,这里的所有转变都是用C#定义的。 C#没有未定义的移位行为。