网络通信数据处理 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 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对 ...
随机推荐
- wap提交表单
原文发布时间为:2010-08-31 -- 来源于本人的百度文章 [由搬家工具导入] <%@ page contentType="text/vnd.wap.wml" page ...
- 局部a链接样式
原文发布时间为:2010-01-16 -- 来源于本人的百度文章 [由搬家工具导入] <style type="text/css"> <!--默认页面链接-> ...
- AC日记——[国家集训队2010]小Z的袜子 cogs 1775
[国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...
- JS-JavaScript String 对象-string对象方法2: indexOf()、lastIndexOf()、charAt()
1.indexOf():可返回某个指定的字符串值在字符串中首次出现的位置. 1).语法:string.indexOf(searchvalue,start): searchvalue:必需.规定 ...
- (4)django mtv模式
mtv模式 http://blog.csdn.net/dbanote/article/details/11338953 models 官方介绍 https://docs.djangoproject.c ...
- shell脚本 linux脚本
linux:shell 脚本 如果判断当前时间 是不是12点之前 用date命令先取得当前的时间(仅取小时数) : date '+%H' #按24小时制取hour (00..23) 然后与12 ...
- Docker 创建image
images 是containers的基础.每次使用docker run 命令都要指定image. 列出本地images zane@zane-V:~$ docker images REPO ...
- Spring事务管理——事务的传播行为
1.简介 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行. 事务的传播行为可以由传播属性指定.Spring定 ...
- Android与javaScript的交互
WebView与js的交互包含两方面,一是在html中通过js调用java代码:二是在安卓java代码中调用js. 一.html中通过js调用java代码 js中调用java代码其实就记住一点,Web ...
- How To Commit Just One Data Block Changes In Oracle Forms
You have an Oracle Form in which you have multiple data blocks and requirement is to commit just one ...