网络通信数据处理 Xbytestring类
PS_Xbytestring
a byte string for store low level data type
文件夹[TOC]
base info
在基于TCP/UDP 或者串口通信等底层的通信过程中。涉及到大量的字符串操作:存储,拷贝, 传參 等。
xbytestring 类时面向底层通信,专门针对 unsigned char 字符串操作的而开发的。 相对于使用 字符指针的开发方式, xbytestring 具备 调用方便, 安全的特性,非常好的攻克了 字符串操作过程中遇到的诸多缺陷,于此同一时候 xbytestring 能够非常好的兼容 ST::string 。unsigned char ,char 数据类型,方便开发人员更加在各个数据类型之间转化。
background
在低层次的网络通信过程中。全部的数据都是通过 ascii 码的形式接受和传输。使用char,或者unsigned char的数据类型 进行数据的存储或者传递 对于上层的开发时是非常不方便。
因为期间涉及到大量的动态内存创建 和删除,指针传递。拷贝,内存溢出则是这其中最easy引发的问题,这是另无数开发头疼不已的问题,尽管非常多情况下能够用智能指针解决问题。可是对于字符的操作却不总是那么的安全和友好。
- C 语言的特性 : 为了高效而牺牲了代码的安全
- 高级的语言特性 : 牺牲代码的效率来换取 代码安全和开发效率
analysis
略微有开发经验的读者可能联想到了 STL库提供的 std::string来解决问题. string 能够非常好的做到 字符串数据的存储和 传递, 可是在实际的开发的过程中,基于UDP /TCP 协议的网络通信中,涉及到大量的使用0x00 这种字符代表的操作, 而string 天生对0x 00 敏感的特性(默觉得结束符),导致string会自己主动丢弃在接受到0x00字符后的全部的数据.
非常显然,这不是我们所希望看到的结果。
为了更好的兼容
0x00。方便的存储和传參的需求。 在开发过程中急需一 相似于string的容器。能够非常好的存储网络其中给定长度的 字符串.
经过一番谷歌之后, 仅有的一点发现也只 是 java 平台下的 ByteString ,非常可惜,这不是给C++ 用的, 考虑再三,为什么不重造一个呢? 造轮子可是C++ 的专利啊。
feature
- 操作方便安全,接口友好
- 兼容 string 的接口
- 默认存储 unsigned char
- 高速实现 xbytestring 和 char ,string 数据类型的转化
- 自由拓展字符串长度
- 内存安全
///////////////////////////////////////////////////////////////
/*
File name : Xbytestring.h
Author : LEO
Date : 2015-3-12
Email : lion_117@126.com
Description:
All Rights Reserved
*/
///////////////////////////////////////////////////////////////
#pragma once
#include <string>
#include <vector>
using namespace std;
typedef unsigned char u_char;
typedef unsigned int u_int;
class Xbytestring
{
private: // to realize the copy constructor fuction
vector<u_char> list_datastring;
public:
Xbytestring(void);
Xbytestring(u_char *pchar , u_int nlenth);
Xbytestring(string pstring);
Xbytestring(const Xbytestring &obj_string);
u_char & operator[](u_int nindex);
Xbytestring operator+(Xbytestring & obj_a );
~Xbytestring(void);
public:
u_int size();
u_char at( u_int nindex);
bool empty();
void clear();
void c_str( u_char *pchar );
string tostring();
string tosafestring();
void setdata(u_char *pchar , u_int nlenth);
void setdata(string pstr);
void setdata(Xbytestring pobj);
//**********abandon function interface ******//
void Set_data(u_char *pchar , u_int nlenth);
void Set_data(string pstr);
//*******************************************//
void append(u_char *pchar , u_int nlenth);
void append(string pstring);
void append(u_char pchar);
void append(Xbytestring pobj);
void erease(u_int nindex);
private:
bool Copy_deep(u_char * pstr , u_int nlenth);
};
github
网络通信数据处理 Xbytestring类的更多相关文章
- C# Winform下一个热插拔的MIS/MRP/ERP框架12(数据处理基类)
作为ERP等数据应用程序,数据库的处理是重中之重. 在框架中,我封装了一个数据库的基类,在每个模组启动或窗体启动过程中,实例化一个基类即可调用CRUD操作(create 添加read读取 update ...
- Scrapy学习-4-Items类&Pipelines类
items类使用 作用 能使得我们非常方便的操作字段名 在items.py中定制我们的类 class ArticleItem(scrapy.Item): title = scrapy.Field() ...
- Java常见网络操作(URL类,InetAddress类,URLConnection类)
*****************InetAddress********************** InetAddress:用于标识网络上的硬件资源(如,IP,主机名,域名等). 对于Inet ...
- 基于docker构建flink大数据处理平台
https://www.cnblogs.com/1ssqq1lxr/p/10417005.html 由于公司业务需求,需要搭建一套实时处理数据平台,基于多方面调研选择了Flink. 初始化Swarm环 ...
- Java类的继承与多态特性-入门笔记
相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...
- WCF基础
初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充. SOA Service-Oriented Architecture,面向服务架构,粗粒度.开放式.松耦合的服务结构,将应用程序 ...
- iOS常用第三方开源框架和优秀开发者博客等
博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...
- ognl
一:什么是值栈 1:ValueStack:值栈.其本身的数据结构是一个栈,使用者可以把一些对象存入栈中.然后使用动态的表达式来读取bean的属性.由于值栈中可能有多个对象 值栈会按照对象出栈的顺序依次 ...
- asp.net面试题汇总
1.静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对 ...
随机推荐
- MFC点击控件拖动窗口
void CMouseClickDlg::OnLButtonDown(UINT nFlags, CPoint point) { CDialogEx::OnLButtonDown(nFlags, poi ...
- webpack-dev-server 支持其他设备访问配置
webpack-dev-server 打开的服务默认是只能localhost访问的,当有时候需要让别人访问的时候可以配置 --host 192.168.84 这样在同一个局域网下面就可以通过该ip来访 ...
- 17.2.10 NOIP模拟赛 聪哥的工资
聪哥的工资 (money/money.in/money.out) 时限1000ms 内存256MB 题目描述 lwher: 了体验劳苦大众的生活,聪哥在暑假参加了打零工的活动,这个活动分为n个工作日, ...
- 利用$.getJSON() 跨域请求操作
原文发布时间为:2011-01-14 -- 来源于本人的百度文章 [由搬家工具导入] $.get 没有权限? $.post 没有权限? 因为他们都不能跨域,那就用 $.getJSON() 吧 利用$. ...
- js6:history和navigator对象的学习
原文发布时间为:2008-11-08 -- 来源于本人的百度文章 [由搬家工具导入] <html> <head> <title>js</title> & ...
- 【Visual Studio】error c4996: 'fopen': This function or variable may be unsafe(转)
原文转自 http://blog.csdn.net/zhangyuehuan/article/details/12012635 [解决方案]项目 =>属性 =>c/c++ =>预处 ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---2
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...
- [SaltStack] Multi-Master配置
Multi Master配置 从salt 0.16.0版本开始, 管理minions可以使用multi-master特性. 当使用multi-master时, 所有masters均可以正常运行, 任何 ...
- LeetCode OJ-- Reorder List **
https://oj.leetcode.com/problems/reorder-list/ 将一个链表重新排序,比如 1 2 3 4 5,变成 1 5 2 4 3 1.找到中间节点 mid 2.将链 ...
- AC日记——任务查询系统 洛谷 P3168
题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第Ei ...