[CPP]以位流的方式从char数组中读取数据

来源:互联网 发布:淘宝上代接信用卡电话 编辑:程序博客网 时间:2024/05/19 11:44
#include<stdio.h>#include<stdlib.h>/* * 以位流的方式从char数组中读取读取制定位宽的数据 * buf    : 以位流的方式储存数据,网络模式存储,big-end * start  : 需读取位数据的起始位置,从0开始计数 * length : 需读取的位宽 * 返回值 : 以无符号整型的方式返回读到的数据 * 例如 buf={0x35,0x2e,0xf8,0x53},start=6,length=6,则返回0x12 */int BitsToUnsigned(const char* buf,int start,int length){if(length>((int)sizeof(int))*8) return -1;int t0=start/8;int t1=start%8;int ret=buf[0]&0xFF;if(t1!=0) ret=((ret<<t1)&0xFF)>>t1;if(length<(8-t1)) ret >>= ((8-t1)-length);else{length -= (8-t1);while(length>=8){t0++;ret = (ret<<8) | (buf[t0]&0xFF);length -= 8;}if(length>0){ret <<= length;t1 = buf[t0+1]&0xFF;t1 >>= (8-length);ret |= t1;}}return ret;}int main(){char buf[]={0x35,0x2E,0xF8,0x53};printf("%X\n",BitsToUnsigned(buf,6,6));printf("%X\n",BitsToUnsigned(buf,2,2));printf("%X\n",BitsToUnsigned(buf,0,32));return 0;}

0 0
原创粉丝点击