2016-02-18 3 views
3

Я новичок! Мне нужно побить бит шестнадцатеричных значений. Я не уверен, как это сделать.Передайте каждый бит внутри байта

скажем, у меня есть массив определен ниже,

const uint_8t a[] = { 0xAA, 0xF8, 0x03, ... }; 
int size=sizeof(a)/8; 

//edited 

SBIT(port, SFR_P0, 1); 

void Data(int *a, int size) { 
    int i; 

    for (i = 0; i < size; i++) { 
     port = a[i]; 
    } 
} 

Как я могу передать этот бит массива по кусочкам к функции, указывающие на MSB первым.

+0

Вы имеете в виду, что хотите передать как двоичные цифры? –

+0

да, точно! – sss

+0

Пожалуйста, покажите подпись функции, в которую вы хотели бы передать данные. – Codor

ответ

1

Вы не можете пройти бит адреса. Но вы можете перечислить биты и передать их значения с 2 вложенных циклов:

const uint_8t a[] = { 0xAA, 0xF8, 0x03, ... }; 
size_t size = sizeof(a); 
for (size_t i = 0; i < size; i++) { 
    for (int shift = 8; shift-- > 0;) { 
     transmit_bit((a[i] >> shift) & 1); 
    } 
} 
+0

Я считаю, что внутренний цикл должен быть 'for (int shift = 7; shift--> = 0;)' as в противном случае самый старший бит сдвигается на первой итерации. – Codor

+2

@ Кодор: нет, ваша версия пропускает самый значительный бит. Альтернативой, которая требует подписанного типа, будет 'for (int shift = 7; shift> = 0; shift--) ...', но мне нравится подчеркивать количество итераций '8' и использовать' shift--> 0' позволяет неподписанному типу перечислять значения от '8-1' до' 0' включительно. – chqrlie

+0

Вы правы, у меня было неправильное представление о том, когда происходит «смена». – Codor

0

отдельные биты одного uint_8targ можно индексировать следующим образом, где самый старший бит обрабатывается первым.

for (int i = 7; i >= 0; i--) 
{ 
    uint_8t i_th_bit = (arg >> i) & 1; 
} 

Вы можете перебрать a и обработать байт побитового, как описано выше.

+0

Спасибо за помощь – sss

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