在一个字节内传输每个位

时间:2016-02-18 08:26:56

标签: c

我是新手! 我需要一点一点地传递一个十六进制值数组。我不知道该怎么做。

让我们说我在下面定义了数组,

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的函数。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

单个RemoteViews uint_8t的各个位可以按如下方式编制索引,其中最重要的位首先被处理。

arg

您可以迭代for (int i = 7; i >= 0; i--) { uint_8t i_th_bit = ( arg >> i ) & 1; } 并按上述方式逐位处理字节。