从 c 中的文件中检索 header

retrieve a header from a file in c

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

struct record {
    
    unsigned int type : 15;
    unsigned int f : 1; 
    unsigned int length : 16;

    char* payload;
    unsigned int uuid: 32;


};

我只想存储 32 位长的 header。它由三个部分组成,顺序如下:类型、页脚和长度。它们各自的长度分别为 15,1 和 16 位。我想知道我应该如何将这些值存储在我的结构的位域中。

我还需要找到消息中包含的 octets/bytes 的数量(包括 header)

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

编辑: 这是消息的格式:

0            15 16             31
+-------------+-+--------------+
|TYPE         |F|    LENGTH    |
+------------------------------+
|                              |
             PAYLOAD
+                              +

|                              |
+------------------------------+
|            (UUID)            |
+------------------------------+

the header is in network order (big endian)

 |TYPE         |F|    LENGTH    |

how I should go about storing these values in the bitfields of my structure.

据我解读:

    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];