如果我想声明一个指向缓冲区的指针,并且缓冲区包含多个不同的类型(int,char等),那么我应该将指针指向缓冲区的类型是什么?无效*?
答案 0 :(得分:2)
答案 1 :(得分:1)
从您的描述看来,您似乎正在尝试将自己的不同类型的序列化设计到缓冲区中(在现实生活中以可移植的方式执行此操作很困难,并且对于大多数情况来说,如protocol buffers这样定义良好的序列化库解决问题)。
过去在我使用自定义缓冲区管理的情况下,我已经看到人们管理缓冲区的三种方式
请记住,如果要分配缓冲区来管理不同类型的数据,则最终会仔细读取字节并将其转换为适当的类型。我喜欢第3种方法,作为从缓冲区读取字节的干净方法,并在过程中保持缓冲区中的字节对齐。
答案 2 :(得分:0)
在Windows下,您可以使用VARIANT。 在Linux下,您可以复制相关
struct tagVARIANT
{
union
{
struct __tagVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union
{
LONGLONG llVal;
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
DOUBLE dblVal;
VARIANT_BOOL boolVal;
_VARIANT_BOOL bool;
SCODE scode;
CY cyVal;
DATE date;
BSTR bstrVal;
IUnknown *punkVal;
IDispatch *pdispVal;
SAFEARRAY *parray;
BYTE *pbVal;
SHORT *piVal;
LONG *plVal;
LONGLONG *pllVal;
FLOAT *pfltVal;
DOUBLE *pdblVal;
VARIANT_BOOL *pboolVal;
_VARIANT_BOOL *pbool;
SCODE *pscode;
CY *pcyVal;
DATE *pdate;
BSTR *pbstrVal;
IUnknown **ppunkVal;
IDispatch **ppdispVal;
SAFEARRAY **pparray;
VARIANT *pvarVal;
PVOID byref;
CHAR cVal;
USHORT uiVal;
ULONG ulVal;
ULONGLONG ullVal;
INT intVal;
UINT uintVal;
DECIMAL *pdecVal;
CHAR *pcVal;
USHORT *puiVal;
ULONG *pulVal;
ULONGLONG *pullVal;
INT *pintVal;
UINT *puintVal;
struct __tagBRECORD
{
PVOID pvRecord;
IRecordInfo *pRecInfo;
} __VARIANT_NAME_4;
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
} ;
将其用作变量,如脚本语言中的变量。
答案 3 :(得分:-1)
如果你想要一个指向不同类型集合的指针,你应该使用一个结构:
struct T {
char C;
int I;
...
}
您可以这样使用它:
T* ptr = &T();
ptr->C = "d";
ptr->I = 1337;