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

How to translate bytes operation to C#?

本文关键字:转换 操作 字节      更新时间:2023-10-16

我想把这个特定的代码从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#中做到这一点?

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

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

我希望我的顺序是正确的,我不是一个伟大的C开发人员。

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