从 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];
我有一个文件,我想从中检索 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];