在程序开发过程中,我们经常会用到按位拷贝一串二进制数,在此提供一个按位拷贝的函数给大家参考,函数源码如下:

 #define char_t   char
#define uint8_t unsigned char
#define int8_t signed char
#define uint16_t unsigned short
#define int16_t signed short
#define uint32_t unsigned long int
#define int32_t signed long int /*
* param[in] SrcData: source data
* param[in] StartsrcBit: start source bit(1, 2, 3, ...)
* param[in] startdstbit: start destination bit(1, 2, 3, ...)
* param[in] CopyLen: copy length
* param[out] DstData: destination data
*/
void copy_data_by_bits(uint8_t *DstData, uint32_t startdstbit, uint8_t *SrcData, uint32_t StartsrcBit, uint32_t CopyLen)
{
uint32_t copysrcbyte = ;
uint32_t copysrcbitofbyte = ;
uint32_t copydstbyte = ;
uint32_t copydstbitofbyte = ;
uint32_t dataLen = CopyLen; if ((NULL == SrcData) || (NULL == DstData)) {
printf("SrcData or DstData is NULL !!!\n");
return;
} while (dataLen > ) {
copydstbyte = ((startdstbit + dataLen) / );
copydstbitofbyte = ((startdstbit + dataLen) % );
copysrcbyte = ((StartsrcBit + dataLen) / );
copysrcbitofbyte = ((StartsrcBit + dataLen) % ); if ( == copysrcbitofbyte) {
copysrcbitofbyte = ;
copysrcbyte = copysrcbyte - ;
} if ( == copydstbitofbyte) {
copydstbitofbyte = ;
copydstbyte = copydstbyte - ;
} DstData[copydstbyte] &= ~( << (copydstbitofbyte - ));
if ((SrcData[copysrcbyte] & ((uint8_t)((uint8_t) << (copysrcbitofbyte - )))) != ) {
DstData[copydstbyte] |= ((uint8_t) << (copydstbitofbyte - ));
}
dataLen--;
}
}

测试代码:

 int main(void)
{
uint8_t SrcData[] = {0x12, 0x34, 0x56, 0x78};
uint32_t StartsrcBit = ;
uint32_t CopyLen = ;
uint8_t DstData[] = {};
uint32_t startdstbit = ; DstData[] = 0xab;
copy_data_by_bits(DstData, startdstbit, SrcData, StartsrcBit, CopyLen);
printf("DstData[0]:%#04x DstData[1]:%#04x\n", DstData[], DstData[]); return ;
}

分析如下:

C语言实现按位拷贝的更多相关文章

  1. C语言中的位拷贝与值拷贝浅谈(转载)

    注:C语言实现的PHP变量的赋值过程中,就涉及到了 深拷贝和浅拷贝 位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(深拷贝).深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象 ...

  2. c++的默认构造函数 VS 深拷贝(值拷贝) 与 浅拷贝(位拷贝)

    C++默认为类生成了四个缺省函数: A(void); // 缺省的无参数构造函数 A(const A &a); // 缺省的拷贝构造函数 ~A(void); // 缺省的析构函数 A & ...

  3. C语言中两位ASCII码可以表示汉字

    最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析. ******************************************************** ...

  4. 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算

    布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运 ...

  5. 一个按比特位拷贝数据的函数copybits

    一个按比特位拷贝数据的函数 没有进行特别的优化.其实还可以在拷贝源开始位置和目标开始位置是2的整数倍位置的时候进行优化. 说明 这个函数用于从src数组首地址跳过sbb个字节,又跳过ssb个比特位,拷 ...

  6. 【转载】C++中的位拷贝和值拷贝

    ---恢复内容开始--- 原文:C++中的位拷贝和值拷贝 原文:http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以Strin ...

  7. 【转】C++中的位拷贝与值拷贝

    [转]http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以String类为例: 首先定义String类,而并不实现其成员函数. ...

  8. C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

  9. C/C++语言中的位运算

    在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...

随机推荐

  1. 2018-2-13-win10-uwp-判断文件存在

    title author date CreateTime categories win10 uwp 判断文件存在 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 1 ...

  2. 2018-4-12-win10-uwp-使用油墨输入

    title author date CreateTime categories win10 uwp 使用油墨输入 lindexi 2018-04-12 14:19:58 +0800 2018-2-13 ...

  3. codeforces 1136E 线段树

    codeforces 1136E: 题意:给你一个长度为n的序列a和长度为n-1的序列k,序列a在任何时候都满足如下性质,a[i+1]>=ai+ki,如果更新后a[i+1]<ai+ki了, ...

  4. resin部署安装

    Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身也是采用JAVA语法开发,功能近似于t ...

  5. 记一次买4K显示器的心酸历程

    由于最近在 B 站直播的次数有点多,还有就是平时录制的视频也有点人看了,所以想多做点视频发布到 B 站上面,但是自己看了以前的视频,发现视频确实画面确实粗糙,不仅仅是视频不清晰的原因,更主要的是我眼睛 ...

  6. 分表分库解决方案(mycat,tidb,shardingjdbc)

    公司最近有分表分库的需求,所以整理一下分表分库的解决方案以及相关问题. 1.sharding-jdbc(sharding-sphere) 优点: 1.可适用于任何基于java的ORM框架,如:JPA. ...

  7. $HDU1846\ Brave\ Game$ 博弈论

    正解:博弈论 解题报告: 传送门! 巴什博奕板子题鸭$QwQ$ 就有个结论,是说当$(m+1)\mid n$时先手必败,否则必胜 这个瞎证明一下就能出来 就考虑当$(m+1)\mid 1$时,若先手取 ...

  8. 日期格式化使用 YYYY-MM-dd 的潜在问题

    昨天在v站上看到这个关于YYYY-MM-dd的使用而出现Bug的帖子(v2ex.com/t/633650)非常有意思,所以拿过来分享一下. 在任何编程语言中,对于时间.数字等数据上,都存在很多类似这种 ...

  9. 《带你装B,带你飞》pytest成神之路2- 执行用例规则和pycharm运行的三种姿态

    1. 简介 今天北京下的雪好大好美啊!!!哎呀,忘记拍照片了,自己想象一下吧.言归真传,今天还是开始pytest的学习和修炼,上一篇写完后群里反响各式各样的,几家欢乐几家愁,有的高兴说自己刚好要用到了 ...

  10. 基于Tesseract的OCR识别小程序

    一.背景 先说下开发背景,今年有次搬家找房子(2020了应该叫去年了),发现每天都要对着各种租房广告打很多电话.(当然网上也找了实地也找),每次基本都是对着墙面看电话号码然后拨打,次数一多就感觉非常麻 ...