2019-07-21 06:27发布
xiatianyun 发表于 2018-12-22 10:50 如果元素个数是三个,问题比较简单,可如果个数未知就只能单个右移了。 对以,你要求左移,怎么你右移了呢 ...
Yefeng是叶峰 发表于 2018-12-22 11:24 static void data_offset(uint8_t len, uint8_t data_len, uint8_t* data) { uint8_t byte_nums = (data ...
xiatianyun 发表于 2018-12-23 19:58 问一下,你这里的data_len到底是数据长度还是数据数量? 按说应该是数据数量,但是如果是数量的话开始的 ...
最多设置5个标签!
抱歉抱歉是我写错了
{
uint8_t byte_nums = (data_len + 7) / 8;
uint8_t index = byte_nums;
data[index] = data[index - 1] << (8-len)|data[index] >> len;
for (; index > 0; index--)
{
if (index == 1)
{
data[index - 1] >>= len;
}
else
{
data[index - 1] = data[index - 2] << (8-len) | data[index - 1] >> len;
}
}
}
这是我写的一个函数,能实现整体的右移, len:偏移量,data_len是数据长度,单位都是bit,data是需要移动的数据,这个数据的长度,必须比byte_nums大1,因为如果是1个字节偏移的情况,可能需要两个字节来装后面溢出的那一部分。
但是我还是觉得我写的太麻烦,不知道有没有网友可以提供一个更简单的方法
问一下,你这里的data_len到底是数据长度还是数据数量?
按说应该是数据数量,但是如果是数量的话开始的 data[index] = ......就越界了。
编了一个移动范围为8以内的程序供参考:
void data_offset(unsigned char offset, unsigned char number, unsigned char* pData)
{
unsigned char* pTemp = pData + number - 1; //pTemp Ö¸Ïò×îÄ©Ò»¸öÔªËØ×Ö½Ú£¬Ð¡¶ËģʽÏÂÊÇ×î¸ß×Ö½Ú¡£
for(int i = 0; i < number; i++)
{
*pTemp = (*pTemp << offset) | (*(pTemp - 1) >> (8 - offset));
pTemp--;
}
}
data_len是需要偏移的数据长度 单位是(bit) 比如data_len=16 就两个字节的数据长度
一周热门 更多>