C语言实现按位拷贝
在程序开发过程中,我们经常会用到按位拷贝一串二进制数,在此提供一个按位拷贝的函数给大家参考,函数源码如下:
#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语言实现按位拷贝的更多相关文章
- C语言中的位拷贝与值拷贝浅谈(转载)
注:C语言实现的PHP变量的赋值过程中,就涉及到了 深拷贝和浅拷贝 位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(深拷贝).深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象 ...
- c++的默认构造函数 VS 深拷贝(值拷贝) 与 浅拷贝(位拷贝)
C++默认为类生成了四个缺省函数: A(void); // 缺省的无参数构造函数 A(const A &a); // 缺省的拷贝构造函数 ~A(void); // 缺省的析构函数 A & ...
- C语言中两位ASCII码可以表示汉字
最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析. ******************************************************** ...
- 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算
布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运 ...
- 一个按比特位拷贝数据的函数copybits
一个按比特位拷贝数据的函数 没有进行特别的优化.其实还可以在拷贝源开始位置和目标开始位置是2的整数倍位置的时候进行优化. 说明 这个函数用于从src数组首地址跳过sbb个字节,又跳过ssb个比特位,拷 ...
- 【转载】C++中的位拷贝和值拷贝
---恢复内容开始--- 原文:C++中的位拷贝和值拷贝 原文:http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以Strin ...
- 【转】C++中的位拷贝与值拷贝
[转]http://blog.csdn.net/liam1122/article/details/1966617 为了便于说明我们以String类为例: 首先定义String类,而并不实现其成员函数. ...
- C语言中的位运算和逻辑运算
这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...
- C/C++语言中的位运算
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...
随机推荐
- 装饰器&偏函数与作用域与异常处理与文件读写
装饰器 概念:是一个闭包,把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数 简单的装饰器 def func1(): print("sunck is a good man& ...
- react-native-swiper使用时候的小坑
react-native版本:0.61.1 react-native-swiper版本:1.5.14 当时第一次使用时候直接粘贴的别人博客的教程代码,只修改了swiper里面的元素,结果发现不能切换, ...
- c#中索引器
https://zhidao.baidu.com/question/59675980.html 不是必要的..相当于数学中的一个函数
- [luogu1908]逆序对(upper_bound)
对于给定的一段正整数序列,逆序对就是序列中ai>aj且i<j的有序对 用upper_bound法求逆序对,Code很棒 据说有用树状数组和线段树写逆序对的,这里用upper_bound水一 ...
- 善用GIMP(Linux下的Photoshop),图像处理轻松又自由
善用GIMP(Linux下的Photoshop),图像处理轻松又自由 作者: 善用佳软 日期: 2013-02-16 分类: 2 图像影音 标签: GIMP, image 1. GIMP是什么? GI ...
- 查看当前android设备已安装的第三方包
查看当前android设备已安装的第三方包 adb shell pm list package -3 2 adb shell "getprop ro.build.version ...
- CITRIX VPX配置四层负载
网络拓扑如下: Step1:开启四层负载特性 在Configuration->Traffic Management->Load Balancing上右键弹出菜单点击enable,如下图: ...
- 一点资讯 视频抓取 phantomjs
# _*_ coding: utf- _*_ """ 思路: .列表页使用phantomjs模拟点击.每个链接只抓取第一页9-10条内容,按照标题去重 .布置定时任务,每 ...
- 机器学习算法概述第五章——CART算法
特点: 是一个二叉树,元素可以重复利用,可以做回归也可以做分类,分类用最小二乘法,即误差平方和最小 切割方法: 对于可量化的x来说: 切割点通常为两个x的平均值 左右两部分分别取均值,再评判以哪个分割 ...
- Volatile是用于解决什么问题,谈谈实现原理
一.volatile的作用 通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操 ...