C#:如何将字节的位向左旋转?
我有一个包含C#:如何将字节的位向左旋转?,c#,bit-manipulation,bitwise-operators,C#,Bit Manipulation,Bitwise Operators,我有一个包含0xE1和0x04的字节数组,我需要操纵它来生成0x104,我正在努力处理它。我被告知要做以下事情: 0xE1和0x1F=0x01 向左旋转8位=0x100 0x04添加0x100=0x104 制造商提供的原始说明: 0xE1大于0xE0 0xE1和0x1F=0x01 向左旋转8位=0x100 读取下一个字节=0x04 0x04添加0x100=0x104 我无法工作。我尝试了来自、方法和方法的扩展方法,但都没有成功获得0x100。我应该怎么做才能到达0x100 我以前从未做过位级
0xE1
和0x04
的字节数组,我需要操纵它来生成0x104
,我正在努力处理它。我被告知要做以下事情:
- 0xE1大于0xE0
- 0xE1和0x1F=0x01
- 向左旋转8位=0x100
- 读取下一个字节=0x04
- 0x04添加0x100=0x104
0x100
。我应该怎么做才能到达0x100
我以前从未做过位级操作,所以我一直在努力
更新
我正在分析GPS报告。报告中的字段大小为1或2字节。如果字节0
的值小于0xE0
,则字段大小为1字节。否则,大小是2字节,我应该使用上面的步骤来获得实际值。引用文件:
任何指定为1字节/2字节字段的字段都是使用以下编码的无符号整数:
如果第一个字节小于0xE0(十进制224),则字段大小为1字节,值为整个字节的值。如果第一个字节大于或等于0xE0,则字段大小为2字节,该值为2字节字段的lsb 13位的值(最高有效字节优先)
以下是我正在使用的方法(LINQPad中的原型):
下面是类型
:
[Flags]
public enum Type :
short {
General = 0x00,
Versions = 0x104
}
字节step1=0xE1&0x1F//0x01
short step2=step10x100
的结果不适合字节
那么您使用的实际类型是什么?一个字节上8位的左旋转只会产生完全相同的值。请显示您尝试的确切代码,以便我们能够帮助查明问题。@juharr,我已经更新了问题,提供了有关我正在处理什么以及如何处理它的更多信息。该引文表示2字节字段的lsb 13位。我假设它应该是“last”而不是“lsb”?而且Type
对于枚举来说是一个可怕的名称,因为它已经是类的名称了。这显然不是一组标志(这些标志的幂从0增加到2)。看起来你真的只需要常量值,而OneTwoField
不需要是泛型的。这是文档所说的,所以我不能真正回答这个问题。我所要做的就是文档(在其他领域证明是错误的)和制造商提供的关于如何读取2个字节的说明(我现在也引用了它们)。命名现在还没有定论。我勉强路过时,不得不换了十几次。它可能应该是ItemType
,但正如我所说,这是一个原型。
public struct OneTwoField<T> {
public OneTwoField(
byte size,
T value) {
Offset = size == 1 ? 0 : 1;
Size = size;
Value = value;
}
public int Offset { get; }
public byte Size { get; }
public T Value { get; }
}
[Flags]
public enum Type :
short {
General = 0x00,
Versions = 0x104
}
byte step1 = 0xE1 & 0x1F; //0x01
short step2 = step1 << 8; //0x100