请教关于数据解析问题

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的数据的。极其丑陋。

请问: 如何改进?(我用递归下降法来解析文档的)


...全文
45 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dch4890164 2008-10-09
  • 打赏
  • 举报
回复
1)typedef BYTE*& MYNICENAME;//起个好的别名给它
2)参数宏 或者用一个漂亮的函数把这个功能封起来,眼不见心不烦

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧