PS_Xbytestring

a byte string for store low level data type

文件夹[TOC]


base info

在基于TCP/UDP 或者串口通信底层的通信过程中。涉及到大量的字符串操作:存储拷贝传參 等。

xbytestring 类时面向底层通信,专门针对 unsigned char 字符串操作的而开发的。 相对于使用 字符指针的开发方式, xbytestring 具备 调用方便安全的特性,非常好的攻克了 字符串操作过程中遇到的诸多缺陷,于此同一时候 xbytestring 能够非常好的兼容 ST::stringunsigned 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类的更多相关文章

  1. C# Winform下一个热插拔的MIS/MRP/ERP框架12(数据处理基类)

    作为ERP等数据应用程序,数据库的处理是重中之重. 在框架中,我封装了一个数据库的基类,在每个模组启动或窗体启动过程中,实例化一个基类即可调用CRUD操作(create 添加read读取 update ...

  2. Scrapy学习-4-Items类&Pipelines类

    items类使用 作用 能使得我们非常方便的操作字段名 在items.py中定制我们的类 class ArticleItem(scrapy.Item): title = scrapy.Field() ...

  3. Java常见网络操作(URL类,InetAddress类,URLConnection类)

    *****************InetAddress********************** InetAddress:用于标识网络上的硬件资源(如,IP,主机名,域名等).    对于Inet ...

  4. 基于docker构建flink大数据处理平台

    https://www.cnblogs.com/1ssqq1lxr/p/10417005.html 由于公司业务需求,需要搭建一套实时处理数据平台,基于多方面调研选择了Flink. 初始化Swarm环 ...

  5. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  6. WCF基础

    初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充. SOA Service-Oriented Architecture,面向服务架构,粗粒度.开放式.松耦合的服务结构,将应用程序 ...

  7. iOS常用第三方开源框架和优秀开发者博客等

    博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...

  8. ognl

    一:什么是值栈 1:ValueStack:值栈.其本身的数据结构是一个栈,使用者可以把一些对象存入栈中.然后使用动态的表达式来读取bean的属性.由于值栈中可能有多个对象 值栈会按照对象出栈的顺序依次 ...

  9. asp.net面试题汇总

    1.静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对 ...

随机推荐

  1. create-react-app 配置支持sass并集成autoprefixer插件

    create-react-app的webpack配置在node_modules当中的react-scripts的config文件夹当中,其中webpack.config.dev.js是开发环境的配置, ...

  2. Linux下实现mysql数据库每天自动备份

    Linux下实现mysql数据库每天自动备份 1.基本操作步骤 a.创建备份目录 mkdir -m 777 /home/wwwroot/backup b.创建备份脚本sh vim /home/wwwr ...

  3. C#可选参数与具名参数

    可选参数 static void test1() { func1("A"); func1(); Console.ReadKey(); } ) { Console.WriteLine ...

  4. mvc3 学习链接收集

    原文发布时间为:2011-04-17 -- 来源于本人的百度文章 [由搬家工具导入] The mvc3 study links collection http://dotnetslackers.com ...

  5. 自定义JQuery扩展方法

    ; (function ($, window, document, undefined) { $.getUrlParam = function (name) { var reg = new RegEx ...

  6. Cflow使用详解【转】

    转自:http://blog.csdn.net/hanchaoqi/article/details/40922615 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近使用cflow,根据Cf ...

  7. Linux和Windows兼容

    1. 介绍 我们知道Linux上的应用程序是ELF格式的,而Windows则是PE格式 所以要解决这个问题首先二进制加载问题:其次,就是API问题,两者的API完全不同要实现兼容,就需要构建一个虚拟层 ...

  8. JdbcTemplate模板使用

    1.添加模板的配置文件 在spring的配置文件中加入如下代码 <bean class="org.springframework.jdbc.core.JdbcTemplate" ...

  9. LeetCode OJ-- Divide Two Integers *

    https://oj.leetcode.com/problems/divide-two-integers/ 在不使用乘法.除法.求余的情况下计算除法. 使用减法计算,看看减几次. 刚开始寻思朴素的暴力 ...

  10. AC日记——[国家集训队2010]小Z的袜子 cogs 1775

    [国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...