佚名通过本文主要向大家介绍了位域,位域结构体,c语言位域,位域定义,c位域等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:请教如何实现比特级内存拷贝,位域及其他方法探讨
描述:
想请教各位有什么高效的方法实现这个需求?
楼主现在想到的方法是定义带有位域的结构体,使用memcpy().将数组数据拷贝到结构体中。但是现在的问题是结构体没有实现位对齐,导致拷贝出现了内存空洞。采用#pragma pack(push,1),没有效果,请问应该如何解决?
我使用的是VS2005,WinCE6.
解决方案1:
计算机最小操作单位为字节。
看你提问,估计你也不会汇编。还是想想自己是不是把问题想复杂了。 解决方案2:
描述:
内存数据存储结构wince数据
楼主现在的需求是有共1000byte的数据存储在USORT数组中。现在需要按照协议进行数据拆分。按协议内容,每个实际意义数据占的比特数从1bit~32bit不等。想请教各位有什么高效的方法实现这个需求?
楼主现在想到的方法是定义带有位域的结构体,使用memcpy().将数组数据拷贝到结构体中。但是现在的问题是结构体没有实现位对齐,导致拷贝出现了内存空洞。采用#pragma pack(push,1),没有效果,请问应该如何解决?
我使用的是VS2005,WinCE6.
解决方案1:
计算机最小操作单位为字节。
看你提问,估计你也不会汇编。还是想想自己是不是把问题想复杂了。 解决方案2:
你的数据处理涉及到网络传送吗?如果有就要考虑lsb和msb、big-endian和little-endian等差异引起的数据错误。
解决方案3: 这种问题,其实是没有什么可探讨的。
自己动手,实际看一看 memcpy 的执行效果即可确定 LZ 你的想法是否可行?
已知方法很简单,大家如果有其它未知的方法可以提供当然更好!!!但是没有未知方法前,上述讨论的已知方法,分分钟钟就可以得到结论。如果 LZ 的想法不可行,也没有其它方法,你打算如何做? 答案当然是自己按 bit 的位数对数据进行解析。
逗,memcpy怎么拷贝半个字节的。肯定是整数字节。
你要搞清楚这个原始数据这个1000个字节通过什么方式得来,数据原来怎么排。
比如网络或者串口什么的。发送方把结构体填充好了,直接发过来,那么你就可以用对应的结构体的指针指向数组的地址,进行分析。关键是要知道数据具体怎么排。不知道你说不上。协议的东西你一点都没题,所以你只能自己分析。
好的协议一般会有协议头什么的,然后一个头你就知道后面是什么数据,然后就可以进行下一步分析。就像TCP/IP协议栈一样。
如果你的数据过来后没有任何识别你怎么知道“每个实际意义数据占的比特数从1bit~32bit”具体是多少呢?
你先搞清楚原始数据格式。不然就不要说pack(push,1)无效