我想将此特定代码从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#中重现它吗?
感谢您的帮助。
编辑:
非常感谢您的回复。
我需要在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#中做到这一点?
答案 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#没有未定义的移位行为。