如何在c代码中解析结构的stream_data中的位?

时间:2010-06-15 08:53:57

标签: c bit-manipulation

实施例

typedef struct 
{
  bool streamValid;
  dword dateTime;
  dword timeStamp;
  stream_data[800];
} RadioDataA;

实施例。 stream_data[800]包含的位置:

**Variable**  **Length (in bits)**
packetID        8
packetL         8
versionMajor    4
versionMinor    4
radioID         8

等。

我需要写:

void unpackData(radioDataA *streamData, MA_DataA *maData)
{
  //unpack streamData (from above) & put some of the data into maData
  //How do I read in bits of data? I know it's by groups of 8 but I don't understand how.
  //MAData is also a struct.
}

3 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确,但为什么你不能这样做:

memcpy(maData, streamData->stream_data, sizeof(MA_DataA));

这会将字节数组中包含的数据完全复制到结构中。

答案 1 :(得分:1)

您的类型不一致或未指定。我相信你正试图从字节流中提取打包数据。如果是这样,假设buf包含按指定长度排序的数据。然后,以下代码应正确提取每个字段:

int packetID = buf[0];
int packetL = buf[1];
int versionMajor = (buf[2] >> 4);
int versionMinor = (buf[2] & 0x0F);
int radioID = buf[3];

如您所见,字节对齐的值是简单的副本。但是,必须屏蔽和/或移位4位字段以仅提取所需数据。有关bitwise operations的详细信息,请参阅优秀的Bit Twiddling Hacks代码段。

答案 2 :(得分:0)

我只是想解压缩数据并将其输出。我只是坚持如何处理位并保持索引并确定如何将其截断为我的不同变量。

stream_data [800]的类型为byte。遗憾!!

我不认为memcopy会起作用,因为它不是1:1直接转移。

希望你明白我的意思!