从c中的文件中检索一个头文件



我有一个文件,我想从中检索头,头是在网络顺序(大端),我想把它存储在这个结构中:

struct record {

unsigned int type : 15;
unsigned int f : 1; 
unsigned int length : 16;
char* payload;
unsigned int uuid: 32;

};

我只想存储32位长的头。它有三个部分,按以下顺序排列:类型、页脚和长度。它们的长度分别为15位、1位和16位。我想知道我应该如何将这些值存储在我的结构体的位域中。

我还需要找到消息中包含的字节/字节数(包含头)

注意:该文件包含一个连续的二进制消息,没有中断(从我所理解的)。

编辑:这是消息的格式:

0            15 16             31
+-------------+-+--------------+
|TYPE         |F|    LENGTH    |
+------------------------------+
|                              |
PAYLOAD
+                              +
|                              |
+------------------------------+
|            (UUID)            |
+------------------------------+

报头按网络顺序(大端序)

|TYPE         |F|    LENGTH    |

我应该如何将这些值存储在结构体的位域中。

我的解释是:

v- most significant bit of first byte
v- least significant bit of first byte
|xxxxxxxxxxxxxxx|F|               |
^- Least significant bit of "type"
^- Most significant bit of "type"
field "type" has 15 bits

从文件中读取字节,然后将字节转换为值。我认为这将是以下的东西,但我不确定bytes[1] >> 1的东西:

struct record output;
unsigned char bytes[4];
fread(bytes, sizeof(bytes), 1, file); // read first 4 bytes
// Convert 4 bytes to values you want to have.
output.type = bytes[0] << 7 | bytes[1] >> 1;
output.f = bytes[1] & 0x1;
output.length = bytes[2] << 8 | bytes[3];

相关内容

最新更新