2014-09-19 2 views
1

Я ищу более эффективный/элегантный способ взять первые 4 бита байта. Байты в большой EndianВозьмите первую половину байт

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())); 

ответ

2

Первая половина байта b является

b >> 4 

если вы хотите это переходило в нижние четыре бита. Если вы хотите по-прежнему на месте, но сняв нижнюю половину, это просто

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

Но это выглядит из вашего кода, как если бы бывший является то, что вы хотите.

+0

Именно то, что я искал. raw [28] >> 4 делает то, что мне нужно. Спасибо – Jesse

+0

@Jesse Примечание: я только что отредактировал его дробно. На самом деле вам нужна версия '' '' '' '' '' '' '' ', которая ставит нуль в самом правом бите. Версия '>>' реплицирует знаковый бит, поэтому, если вы начинаете с подписанного типа и отрицательного целого числа, вы получите их в наиболее значимых битах при смене. –

+0

Компилятор, похоже, не похож на >>> – Jesse

Смежные вопросы