zoukankan      html  css  js  c++  java
  • 用来序列化通用的数据类型

    1. /***********************************************************  
    2. 版权声明:
    3. 文 件 名:  cstandardserialize.cpp  
    4. 创 建 人:    
    5. 创建日期:     
    6. 说    明: 用来序列化通用的数据类型  
    7. 版 本 号:  
    8. 修改记录: 防止内存越界  
    9. ***********************************************************/   
    10. #include "stdafx.h"   
    11. #include "StandardSerialize.h"   
    12.    
    13.    
    14. CStandardSerialize::CStandardSerialize(char * apBuffer,long alBufLen, ENUM_TYPE abyType)   
    15. {   
    16.     mpBuffer = apBuffer;   
    17.     mbyType  = abyType;   
    18.     mlBufLen = alBufLen;   
    19.     mlDataLen = 0;   
    20. }   
    21.    
    22. CStandardSerialize::~CStandardSerialize()   
    23. {   
    24. }   
    25.    
    26. long CStandardSerialize::getDataLen()   
    27. {   
    28.     return mlDataLen;   
    29. }   
    30.    
    31. int CStandardSerialize::Serialize(bool& abValue)   
    32. {   
    33.     if (mlBufLen < (mlDataLen+1))   
    34.         throw(-1);   
    35.    
    36.     if (mbyType == LOAD)//读取   
    37.     {      
    38.         memcpy(&abValue,mpBuffer + mlDataLen, 1);                  
    39.     }   
    40.     else                //存储   
    41.     {   
    42.         memcpy(mpBuffer + mlDataLen, &abValue, 1);   
    43.     }   
    44.     mlDataLen += 1;   
    45.    
    46.     return 1;   
    47. }   
    48.    
    49.    
    50. int CStandardSerialize::Serialize(int&  aiValue)   
    51. {   
    52.     if (mlBufLen < (mlDataLen+4))   
    53.         throw(-1);   
    54.    
    55.     if (mbyType == LOAD)//读取   
    56.     {      
    57.         memcpy(&aiValue,mpBuffer + mlDataLen, 4);                  
    58.     }   
    59.     else                //存储   
    60.     {   
    61.         memcpy(mpBuffer + mlDataLen, &aiValue, 4);   
    62.     }   
    63.     mlDataLen += 4;   
    64.     return 1;   
    65. }   
    66.    
    67. int CStandardSerialize::Serialize(BYTE& abyValue)   
    68. {   
    69.     if (mlBufLen < (mlDataLen+1))   
    70.         throw(-1);   
    71.    
    72.     if (mbyType == LOAD)//读取   
    73.     {      
    74.         memcpy(&abyValue,mpBuffer + mlDataLen, 1);                 
    75.     }   
    76.     else                //存储   
    77.     {   
    78.         memcpy(mpBuffer + mlDataLen, &abyValue, 1);   
    79.     }   
    80.     mlDataLen += 1;   
    81.     return 1;      
    82. }   
    83.    
    84.    
    85. /****************************************************************  
    86. 函 数 名:int   Serialize(short&    asValue);  
    87. 功能描述:序列化WORD类型的值  
    88. 输入参数:WORD awValue(既可以作为输入,也可以作为输出)  
    89. 输出参数:  
    90. 返 回 值:int 1=成功;-1=失败(throw,有外部捕获)  
    91. 创建日期:2002-5-27  
    92. 创 建 者:Siwen  
    93. ****************************************************************/   
    94. int CStandardSerialize::Serialize(short& asValue)   
    95. {   
    96.     if (mlBufLen < (mlDataLen+2))   
    97.         throw(-1);   
    98.    
    99.     if (mbyType == LOAD)//读取   
    100.     {      
    101.         memcpy(&asValue,mpBuffer + mlDataLen, 2);   
    102.     }   
    103.     else                //存储   
    104.     {   
    105.         memcpy(mpBuffer + mlDataLen, &asValue, 2);   
    106.     }   
    107.     mlDataLen += 2;   
    108.     return 1;   
    109.    
    110. }   
    111.    
    112. int CStandardSerialize::Serialize(WORD& awValue)   
    113. {   
    114.     if (mlBufLen < (mlDataLen+2))   
    115.         throw(-1);   
    116.    
    117.     if (mbyType == LOAD)//读取   
    118.     {      
    119.         memcpy(&awValue,mpBuffer + mlDataLen, 2);   
    120.     }   
    121.     else                //存储   
    122.     {   
    123.         memcpy(mpBuffer + mlDataLen, &awValue, 2);   
    124.     }   
    125.     mlDataLen += 2;   
    126.     return 1;   
    127. }   
    128.    
    129. int CStandardSerialize::Serialize(long& alValue)   
    130. {   
    131.     if (mlBufLen < (mlDataLen+4))   
    132.         throw(-1);   
    133.    
    134.     if (mbyType == LOAD)//读取   
    135.     {      
    136.         memcpy(&alValue,mpBuffer + mlDataLen, 4);                  
    137.     }   
    138.     else                //存储   
    139.     {   
    140.         memcpy(mpBuffer + mlDataLen, &alValue, 4);   
    141.     }   
    142.     mlDataLen += 4;   
    143.     return 1;   
    144. }   
    145.    
    146. int CStandardSerialize::Serialize(unsigned long&    aulValue)   
    147. {   
    148.     if (mlBufLen < (mlDataLen+4))   
    149.         throw(-1);   
    150.    
    151.     if (mbyType == LOAD)//读取   
    152.     {      
    153.         memcpy(&aulValue,mpBuffer + mlDataLen, 4);                 
    154.     }   
    155.     else                //存储   
    156.     {   
    157.         memcpy(mpBuffer + mlDataLen, &aulValue, 4);   
    158.     }   
    159.     mlDataLen += 4;   
    160.    
    161.     return 1;   
    162. }   
    163.    
    164. int CStandardSerialize::Serialize(__int64&  aiValue)   
    165. {      
    166.     if (mlBufLen < (mlDataLen+8))   
    167.         throw(-1);   
    168.    
    169.     if (mbyType == LOAD)//读取   
    170.     {      
    171.         memcpy(&aiValue,mpBuffer + mlDataLen, 8);                  
    172.     }   
    173.     else                //存储   
    174.     {   
    175.         memcpy(mpBuffer + mlDataLen, &aiValue, 8);   
    176.     }   
    177.     mlDataLen += 8;   
    178.    
    179.     return 1;   
    180. }   
    181.    
    182. /*  
    183. int CStandardSerialize::Serialize(GUID& aGuidValue)  
    184.  
    185.     if (mlBufLen < (mlDataLen+16))  
    186.         throw(-1);  
    187.   
    188.     if (mbyType == LOAD)//读取  
    189.     {     
    190.         long *  lpLongBuffer;  
    191.         WORD *  lpWordBuffer;  
    192.         lpLongBuffer = (long *)(mpBuffer + mlDataLen);  
    193.         aGuidValue.Data1 = lpLongBuffer[0];  
    194.         mlDataLen += 4;  
    195.         lpWordBuffer = (WORD *)(mpBuffer + mlDataLen);  
    196.         aGuidValue.Data2 = lpWordBuffer[0];  
    197.         mlDataLen += 2;  
    198.         lpWordBuffer = (WORD *)(mpBuffer + mlDataLen);  
    199.         aGuidValue.Data3 = lpWordBuffer[0];  
    200.         mlDataLen += 2;  
    201.         memcpy(aGuidValue.Data4, mpBuffer+mlDataLen, 8);  
    202.         mlDataLen += 8;         
    203.     }  
    204.     else                //存储  
    205.     {  
    206.         memcpy(mpBuffer + mlDataLen, &(aGuidValue.Data1), 4);  
    207.         mlDataLen += 4;  
    208.         memcpy(mpBuffer+mlDataLen, &(aGuidValue.Data2), 2);  
    209.         mlDataLen += 2;  
    210.         memcpy(mpBuffer+mlDataLen, &(aGuidValue.Data3), 2);  
    211.         mlDataLen += 2;  
    212.         memcpy(mpBuffer + mlDataLen, aGuidValue.Data4, 8);  
    213.         mlDataLen += 8;  
    214.     }          
    215.   
    216.     return 1;  
    217.  
    218. */   
    219. //*****************************************************************************   
    220. //  函数:  序列化以0结尾的字符串数据   
    221. //  参数:  char * apValue     字符串数据   
    222. //          WORD awBufferLen    容纳此字符串数据的缓存区大小   
    223. //  返回值:int  1= 成功; -1 = 失败   
    224. //  用法:    
    225. //*****************************************************************************   
    226. int CStandardSerialize::Serialize(char * apValue,WORD awMaxLen)   
    227. {   
    228.     if (mlBufLen < (mlDataLen+2))   
    229.         throw(-1);   
    230.    
    231.     WORD    lwLen = 0;   
    232.     if (mbyType == LOAD)    //读取   
    233.     {   
    234.         //首先读取长度   
    235.         memcpy(&lwLen,mpBuffer + mlDataLen, 2);   
    236.         mlDataLen += 2;   
    237.    
    238.         //读取数据本身   
    239.         if ((lwLen >= awMaxLen) || ((mlDataLen+lwLen) > mlBufLen))   
    240.         {   
    241.             throw(-1);   
    242.         }   
    243.         memcpy(apValue, mpBuffer + mlDataLen, lwLen);   
    244.         apValue[lwLen] = '';   
    245.         mlDataLen += lwLen;                   
    246.     }   
    247.     else    //存储   
    248.     {           
    249.         //首先存储长度   
    250.         lwLen = strlen(apValue);   
    251.         if ((lwLen >= awMaxLen) || (lwLen+mlDataLen+2 > mlBufLen))   
    252.             throw(-1);   
    253.    
    254.         memcpy(mpBuffer+mlDataLen, &lwLen, 2);   
    255.         mlDataLen += 2;   
    256.    
    257.         //存储数据本身   
    258.         memcpy(mpBuffer+mlDataLen, apValue, lwLen);   
    259.         mlDataLen += lwLen;               
    260.     }          
    261.     return 1;      
    262. }   
    263.    
    264. //*****************************************************************************   
    265. //  函数:  序列化数据   
    266. //  参数:  char * apValue     数据   
    267. //          WORD& awLen         此数据的真正长度   
    268. //          WORD awBufferLen    容纳此数据的缓存区大小   
    269. //  返回值:int  1= 成功; -1 = 失败   
    270. //  用法:    
    271. //*****************************************************************************   
    272. int CStandardSerialize::Serialize(char * apValue, WORD awLen,WORD aiBufferLen)   
    273. {   
    274.     if ((awLen > aiBufferLen) || (mlBufLen < (mlDataLen+awLen)))   
    275.         throw (-1);   
    276.    
    277.     if (mbyType == LOAD)    //读取   
    278.     {              
    279.         //因为外部制定了读取长度,所以不需要对数据长度进行序列化   
    280.         memcpy(apValue, mpBuffer + mlDataLen, awLen);               
    281.     }   
    282.     else    //存储数据本身   
    283.     {               
    284.         memcpy(mpBuffer+mlDataLen, apValue, awLen);                           
    285.     }      
    286.     mlDataLen += awLen;   
    287.     return 1;      
    288. }   
  • 相关阅读:
    JSON
    event flow
    for,for each,for in,for of
    history of program language
    px fr em rem
    正则符号
    DOM、BOM
    web布局
    grid
    初学python环境安装
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318623.html
Copyright © 2011-2022 走看看