gpt4 book ai didi

c - 如何用微 Controller 处理一堆0和1?

转载 作者:行者123 更新时间:2023-11-30 15:07:20 24 4
gpt4 key购买 nike

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

即我有 150 位,我想从第 32 位取出 6 位并将其复制到 char(8 位)变量;我知道我可以通过保存为 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;
}

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

[编辑]您可以将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com