如何在 flatbuffers 模式文件中声明指针类型?
how to declare pointer type in flatbuffers schema file?
我正在学习平面缓冲区,我希望在 C 中使用它们。
我想要做的是为我的结构编写一个模式文件。
这是我的结构之一:
typedef struct
{
unsigned short request_number;
unsigned short length;
unsigned short height;
unsigned char *buffer;
} CASH_RECEIPT_REQUEST;
如何在我的架构文件中写入指针 unsigned char *buffer
?
指针大小取决于平台。如果您决定在具有 8 字节大小指针的 64 位处理器上使用它,您可以使用 ulong(如 here 中指定的模式)ulong 大小为 8 字节。因此,在解析端,您可以将 ulong(换句话说,unsigned long)强制转换为 char* 类型以获得正确的指针值。
您的示例的示例架构如下所示
CASH_RECEIPT_REQUEST {
request_number:ushort;
length:ushort;
height:ushort;
buffer:ulong;
}
不存储指针,而是存储它们指向的实际数据:
table CashReceiptRequest {
request_number:ushort;
length:ushort;
height:ushort;
buffer:[ubyte];
}
如您所见,缓冲区是 "vector of ubyte"。请注意,如果 length
是缓冲区的大小,则可以省略该字段,因为该大小已作为向量的一部分存储。
我正在学习平面缓冲区,我希望在 C 中使用它们。 我想要做的是为我的结构编写一个模式文件。 这是我的结构之一:
typedef struct
{
unsigned short request_number;
unsigned short length;
unsigned short height;
unsigned char *buffer;
} CASH_RECEIPT_REQUEST;
如何在我的架构文件中写入指针 unsigned char *buffer
?
指针大小取决于平台。如果您决定在具有 8 字节大小指针的 64 位处理器上使用它,您可以使用 ulong(如 here 中指定的模式)ulong 大小为 8 字节。因此,在解析端,您可以将 ulong(换句话说,unsigned long)强制转换为 char* 类型以获得正确的指针值。 您的示例的示例架构如下所示
CASH_RECEIPT_REQUEST {
request_number:ushort;
length:ushort;
height:ushort;
buffer:ulong;
}
不存储指针,而是存储它们指向的实际数据:
table CashReceiptRequest {
request_number:ushort;
length:ushort;
height:ushort;
buffer:[ubyte];
}
如您所见,缓冲区是 "vector of ubyte"。请注意,如果 length
是缓冲区的大小,则可以省略该字段,因为该大小已作为向量的一部分存储。