关于 如何将不同类型的数据打包成一个数组的问题

happy446 2008-04-01 02:43:34
有5个全局变量:
int nCount=10;
BOOL bValid=TRUE;
char Letter=’p’;
char szName[32]=”I Love C++.”;
DWORD dwMyQQ=11224455;
完成下面2小题:
(1),写一个函数ToPackage,将这5个全局变量打包,放到一个缓冲区里,并且返回你往缓冲区里面写了多少字节数据,该函数可以这样调用:
char Buffer[1024];
int nWriteDataCount=ToPackage(Buffer,sizeof(Buffer));
(2),根据题(1)的打包方法,再写一个解包函数,将缓冲区里面的数据读取到上面的全局变量中。

有点迷惑,不同类型的数据怎么打包 成数组呢?还是有别的理解?

哪位高人指教下或者写下代码 谢谢!
...全文
273 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kimiya25 2008-04-01
  • 打赏
  • 举报
回复
不用结构体可以考虑使用void*数组
gl0312 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Supper_Jerry 的回复:]
做一个结构体啊。
[/Quote]
xkyx_cn 2008-04-01
  • 打赏
  • 举报
回复
上面的if判断少了一个=号:
if (size > sizeof(nCount))
改成:
if (size >= sizeof(nCount))

所有的都改掉
taodm 2008-04-01
  • 打赏
  • 举报
回复
要你把不同类型的数据存到文件里,你会么?
xkyx_cn 2008-04-01
  • 打赏
  • 举报
回复
这样可行不,lz试试

#include "iostream.h"
#include "memory.h"

int nCount = 10;
bool bValid = true;
char Letter = 'p';
char szName[32] = "I Love C++.";
unsigned long dwMyQQ = 11224455;

int ToPackage(char *Buffer, size_t BufferSize)
{
int nRet = 0;
char *p = Buffer;
size_t size = BufferSize;
if (size > sizeof(nCount))
{
memcpy(p, &nCount, sizeof(nCount));
p += sizeof(nCount);
size -= sizeof(nCount);
nRet += sizeof(nCount);
}
if (size > sizeof(bValid))
{
memcpy(p, &bValid, sizeof(bValid));
p += sizeof(bValid);
size -= sizeof(bValid);
nRet += sizeof(bValid);
}
if (size > sizeof(Letter))
{
memcpy(p, &Letter, sizeof(Letter));
p += sizeof(Letter);
size -= sizeof(Letter);
nRet += sizeof(Letter);
}
if (size > sizeof(szName))
{
memcpy(p, &szName, sizeof(szName));
p += sizeof(szName);
size -= sizeof(szName);
nRet += sizeof(szName);
}
if (size > sizeof(dwMyQQ))
{
memcpy(p, &dwMyQQ, sizeof(dwMyQQ));
p += sizeof(dwMyQQ);
size -= sizeof(dwMyQQ);
nRet += sizeof(dwMyQQ);
}

return nRet;
}

int DePackege(char *Buffer, size_t BufferSize)
{
int nRet = 0;
char *p = Buffer;
size_t size = BufferSize;
if (size > sizeof(nCount))
{
memcpy(&nCount, p, sizeof(nCount));
p += sizeof(nCount);
size -= sizeof(nCount);
nRet += sizeof(nCount);
}
if (size > sizeof(bValid))
{
memcpy(&bValid, p, sizeof(bValid));
p += sizeof(bValid);
size -= sizeof(bValid);
nRet += sizeof(bValid);
}
if (size > sizeof(Letter))
{
memcpy(&Letter, p, sizeof(Letter));
p += sizeof(Letter);
size -= sizeof(Letter);
nRet += sizeof(Letter);
}
if (size > sizeof(szName))
{
memcpy(&szName, p, sizeof(szName));
p += sizeof(szName);
size -= sizeof(szName);
nRet += sizeof(szName);
}
if (size > sizeof(dwMyQQ))
{
memcpy(&dwMyQQ, p, sizeof(dwMyQQ));
p += sizeof(dwMyQQ);
size -= sizeof(dwMyQQ);
nRet += sizeof(dwMyQQ);
}

return nRet;
}

int main()
{
cout << "Variables before ToPackage:" << endl;
cout << "nCount:" << nCount << endl;
cout << "bValid:" << bValid << endl;
cout << "Letter:" << Letter << endl;
cout << "szName:" << szName << endl;
cout << "dwMyQQ:" << dwMyQQ << endl;

char buf[1024];
int nWriteByte = ToPackage(buf, sizeof(buf));

cout << "Written bytes:" << nWriteByte << endl;

int nReadByte = DePackege(buf, nWriteByte);

cout << "Variables after DePackege:" << endl;
cout << "nCount:" << nCount << endl;
cout << "bValid:" << bValid << endl;
cout << "Letter:" << Letter << endl;
cout << "szName:" << szName << endl;
cout << "dwMyQQ:" << dwMyQQ << endl;

cout << "Read bytes:" << nReadByte << endl;

return 0;
}
happy446 2008-04-01
  • 打赏
  • 举报
回复
姐姐

char Buffer[1024];
int nWriteDataCount=ToPackage(Buffer,sizeof(Buffer));

很明显 是让用数组结构的吧?
Supper_Jerry 2008-04-01
  • 打赏
  • 举报
回复
做一个结构体啊。

64,312

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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