我正在编写一个程序,用一µC接收一堆0和1,并且需要从任何位置取任意数量的位(1到16)。
即我有150位,我想从第32位中取6位,然后将其复制到char(8bits)变量中;我知道我可以通过将字符串另存为ASCII 0和1来处理字符串,但是我没有太多RAM,因此需要将其另存为位。
较大的变量是32位无符号长,但是保存数据不是我的问题,问题是如何访问特定的位位置并将其复制到char(8)变量。
最佳答案
您可以使用按位运算符:
//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;
}
上面的代码假定开始
[编辑]
您可以将char *更改为所需的任何类型。但是,您需要将dec值更改为适当的位数(8 * SIZE_IN_BYTES),然后应用运算符|。 (“逻辑或”)取回您的字符
例:
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;
}
关于c - 如何用微 Controller 处理一堆0和1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38308992/