如何使用微控制器处理一堆0和1?

时间:2016-07-11 14:04:44

标签: c microcontroller microchip

我正在制作一个程序,用μC接收一堆0和1,并且需要从任何位置获取任意数量的位(1到16)。

即。我有150位,我想从第32位取6位并将其复制到char(8位)变量;我知道我可以通过保存为ASCII 0和1来使用字符串,但我没有很多RAM,所以我需要将它保存为位。

较大的变量是无符号的32位长,但保存数据不是我的问题,问题是如何访问特定的位位置并将其复制到char(8)变量。

1 个答案:

答案 0 :(得分:1)

您可以使用按位运算符:

//bits: your bits (byte array), start: index of the first bit of the char you want
char select(char* bits, int start) {
    dec = start%8;
    return bits[start/8]>>dec + bits[start/8+1]<<dec;
}

上面的代码假设开始&lt; (bits.size() - 8)

[修改] 您可以将char *更改为您想要的任何类型。但是,您需要将dec值更改为适当的位数(8 * SIZE_IN_BYTES)然后应用运算符| (&#34;逻辑或&#34;)让你的char回来

示例:

char select(int* bits, int start) {
    nbitsint = 8*4;
    dec = start%nbitsint;
    if (dec < nbitsint-8) {
       // | 0xff creates creates a byte
        return (bits[start/nbitsint]>>((3-dec/8)*8+dec%8) | 0xff;
    }
    // Getting a byte which is astride two values is tricky
    return (bits[start/nbitsint]>>(start%8) + bits[start/nbitsint+1]<<(start%8) | 0xff;
}