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

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)的打包方法,再写一个解包函数,将缓冲区里面的数据读取到上面的全局变量中。

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

哪位高人指教下或者写下代码 谢谢!
...全文
280 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
  • 打赏
  • 举报
回复
做一个结构体啊。
[入门数据分析的第一堂课]这是一门为数据分析小白量身打造的课程,你从网络或者公众号收集到很多关于数据分析的知识,但是它们零散不体系,所以第一堂课首要目标是为你介绍:Ø  什么是数据分析-知其然才知其所以然Ø  为什么要学数据分析-有目标才有动力Ø  数据分析的学习路线-有方向走得更快Ø  数据分析的模型-分析之道,快速形分析思路Ø  应用案例及场景-分析之术,掌握分析方法[哪些同学适合学习这门课程]想要转行做数据分析师的,零基础亦可工作中需要数据分析技能的,例如运营、产品等对数据分析感兴趣,想要更多了解的[你的收获]n  会为你介绍数据分析的基本情况,为你展现数据分析的全貌。让你清楚知道自己该如何在数据分析地图上行走n  会为你介绍数据分析的分析方法和模型。这部分是讲数据分析的道,只有学会底层逻辑,能够在面对问题时有自己的想法,才能够下一步采取行动n  会为你介绍数据分析的数据处理和常用分析方法。这篇是讲数据分析的术,先有道,后而用术来实现你的想法,得出最终的结论。n  会为你介绍数据分析的应用。学到这里,你对数据分析已经有了初步的认识,并通过一些案例为你展现真实的应用。[专享增值服务]1:一对一答疑         关于课程问题可以通过微信直接询问老师,获得老师的一对一答疑2:转行问题解答         在转行的过程中的相关问题都可以询问老师,可获得一对一咨询机会3:打包资料分享         15本数据分析相关的电子书,一次获得终身学习

64,849

社区成员

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

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