网路传输-数据结构

引言

在进行网络传输的时候,常常会定义协议的书库类型,json,还是结构体。
下面就说说其中要注意的事项

结构体的长度

如何获取结构体的长度

struct MyStruct
{
	int a;
	int b;
	int c;
};
	MyStruct m;
	int len = sizeof(m);
	std::cout << len << std::endl;
// 输出 是 12 ,(每个int的长度是4)

类的长度

MyClass::MyClass()
{
}
	MyClass m;
	int len = sizeof(m);
	std::cout << len << std::endl;
// 输出 是 1 ,(空类的长度是1)

std::string

std::string str="123456789";
int len = sizeof(str);
std::cout << len << std::endl;
// 输出是 28 

在使用VS2015的32位debug构建中,sizeof(std::string)返回28;在64位debug构建中,得到40;在32位release构建中,得到24,在64位release构建中,得到32。
这是因为std::string的内部表示随不同的构建选项而变化:例如,调试构建通常包含额外的机制以帮助发现bug,这会增加表示的大小;此外,在64位构建中,指针更大,所以大小相对32位构建的要大点。

std::string str="123456789";
std::cout << str.length() << std::endl;
// 输出是 9 

输出是 字符串的长度

注意

struct MyStruct
{
	int a;
	int b;
	int c;
	std::string str;
};

按照上面的方式定义结构体,在网络传输中,由于str长度的不确定,在解析的时候,会出现问题。
所以要使用定常的数据类型比如

struct MyStruct
{
	int a;
	int b;
	int c;
	char[256]
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值