2015-05-14 2 views
2

У меня есть массив байтов 3 байта: byte[] VG = new Byte[3];Удалить первые 4 бита из массива байтов (сдвиг влево)

этого являются значения массива: 00-28-A0. Я должен удалить первые 4 бита и получить этот результат: 02-8A-00

+0

Какая у вас проблема? Вы понимаете алгоритм использования? Если нет, с какими трудностями вы работаете? Если да, то в чем проблема, вы его реализуете? (Подсказка: каждый байт должен измениться. Выработайте выражение для нового значения каждого байта в терминах старых значений.) –

+3

Кажется, это не дубликат, так как он хочет сдвинуть * бит * не * байты *. – BradleyDotNET

+0

Спасибо за ваш ответ. Я получаю массив, но первые 4 бита, мы не должны использовать. Поэтому мне нужно сделать смещение бит, но я не понимаю дома, чтобы это сделать. Я читал о маскировке, но вся информация, которую я нашел, предназначалась для маскировки только одного байта. В этом случае мне нужно переместить все биты массива на 4 места, чтобы сделать то, что я хочу. – Nico812

ответ

5
// Shift Four Left 
VG[0] = (byte)((byte)(VG[1] >> 4) + (byte)(VG[0] << 4)); 
VG[1] = (byte)((byte)(VG[2] >> 4) + (byte)(VG[1] << 4)); 
VG[2] = (byte)(VG[2] << 4); 

// Shift Four Right 
VG[2] = (byte)((byte)(VG[2] >> 4) + (byte)(VG[1] << 4)); 
VG[1] = (byte)((byte)(VG[1] >> 4) + (byte)(VG[0] << 4)); 
VG[0] = (byte)(VG[0] >> 4); 
+2

Живая скрипка, показывающая, что она работает. https://dotnetfiddle.net/D1hDWm –

+0

Отличный !! Он отлично работает, спасибо! , Извините, я не слишком понимаю маскировку. Как бы это было, если я хочу переместить ее вправо? В примере i, представленном obtein: 00-02-8A. Спасибо за вашу помощь – Nico812

+1

@ShaunLuttin, я не знал этого сайта раньше, спасибо за это! – TimBoss

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