请教关于数据解析问题
forge 2008-10-06 06:37:56 我想从二进制数据流中,解析如下数据:
struct
{
int n; /* n 必须是BYTE WORD DWORD之一的长度 */
union
{
BYTE
WORD
DWORD
};
};
我有个函数如下:
int XXXXXX::GetParameterId(BYTE*& stream, const int length)
{
int id_length = 0;
switch(length)
{
case sizeof(BYTE):
id_length = static_cast<int>(*stream);
stream += sizeof(BYTE);
break;
case sizeof(WORD):
id_length = static_cast<int>(*(reinterpret_cast<WORD*>(stream)));
stream += sizeof(WORD);
break;
case sizeof(DWORD):
id_length = static_cast<int>(*(reinterpret_cast<DWORD*>(stream)));
stream += sizeof(DWORD);
break;
default:
id_length = 0;
break;
}
return id_length;
}
问题如下:
1) BYTE*& stream 这个是为了移动指向数据流的指针的。太丑陋。
2) id_length = static_cast<int>(*(reinterpret_cast<DWORD*>(stream))); 这个为了取得上面union的数据的。极其丑陋。
请问: 如何改进?(我用递归下降法来解析文档的)