C# 取前半个字节

C# 取前半个字节,c#,byte,C#,Byte,我正在寻找一种更高效/优雅的方式来获取字节的前4位。字节是以大端为单位的 var gpsFixStatus = (int)raw[28]; int[] remainder = new int[8]; for (int i = 0; i < 7; i++) { remainder[i] = gpsFixStatus % 2; gpsFixStatus = gpsFixStatus / 2; } var gpsFix = byte.Parse((remainder[7].ToS

我正在寻找一种更高效/优雅的方式来获取字节的前4位。字节是以大端为单位的

var gpsFixStatus = (int)raw[28];
int[] remainder = new int[8];
for (int i = 0; i < 7; i++)
{
    remainder[i] = gpsFixStatus % 2;
    gpsFixStatus = gpsFixStatus / 2;
}
var gpsFix = byte.Parse((remainder[7].ToString() + remainder[6].ToString() + remainder[5].ToString() + remainder[4].ToString()));
var gpsFixStatus=(int)原始[28];
int[]余数=新的int[8];
对于(int i=0;i<7;i++)
{
余数[i]=gpsFixStatus%2;
gpsFixStatus=gpsFixStatus/2;
}
var gpsFix=byte.Parse((余数[7].ToString()+余数[6].ToString()+余数[5].ToString()+余数[4].ToString());

字节
b的前半部分是

b >> 4
假设你想把它移到下四位。如果你想让它保持在原来的位置,但是去掉下半部分,它只是

b & 240  // or "b & 0xf0"

但从您的代码看,前者似乎是您想要的。

正是我想要的。原始[28]>>4符合我的需要。Thanks@Jesse注意:我只是对它进行了小部分的编辑。您真的想要
>>
版本,它在最右边的位上放一个零。
>
版本复制了符号位,因此,如果以有符号类型和负整数开头,则在移位时会得到最高有效位。编译器似乎不喜欢>>@Jesse这是Java吗?这是我的猜测,但是用一种特定的语言标记帖子会很有用。@Jesse也许是VB?在这种情况下,
>
就是您想要的:一个
字节
在VB中是无符号的,所以它在MSB中放零。