如何将字节操作转换为C#
How to translate bytes operation to 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#中做到这一点?
C#没有位字段。CLR两者都没有。因此,您需要手动执行C编译器为您所做的操作:使用位级操作提取位。
uint input = ...;
var part1 = input >> (4+23) & 0x1F;
var part2 = input >> (23) & 0xF;
var part3 = input >> (0) & appropriateMaskWith23OnesHere;
我希望我的顺序是正确的,我不是一个伟大的C开发人员。
顺便说一句,这里所有的移位都是用C#定义的。C#没有未定义的移位行为。
相关文章:
- 逐位操作的隐式类型转换
- C++:如何将 std::vector 操作转换为 Eigen::VectorXf?
- 使用用户定义的操作隐式转换为类型
- 复制交换习惯用法-我们可以在这里使用动态强制转换操作吗
- 自动符号转换,用于对类等数学向量进行操作
- 位操作将最左侧的设置位转换为右侧交替位?
- 将 int 转换为双精度以执行 std::complex <double>的"*"操作
- CAN模板类型推理考虑原始操作类型转换
- 将 lua 脚本转换为等效于它的指令(操作码)
- C 库中是否有任何功能将字符串转换为算术操作
- 为什么C++标准指定有符号整数在具有混合符号的二进制操作中强制转换为无符号整数
- 是否可以将结构与条件语句完全相同的字符串转换为可以读取和操作的语句?
- 无法通过此操作,因为类型的错误转换
- 操作方法:将 boost::endian 缓冲区类型转换回本机格式
- 了解C++位操作中的二进制转换实现
- 使用位操作将8字节数字中的每个字节中的一位转换为单个字节
- 在范围内添加位操作和转换式的枚举 - 圣诞节探索
- 当endianes确实很重要时,进行强制转换操作
- C++类和OpenCV矩阵操作之间的转换
- Boost::mpl转换操作元函数参数错误