• 十六进制字符串


     1 // Copyright (c) 
     2 // All rights reserved.
     3 //
     4 //Describe : Hex string
     5 //Author   : Qing
     6 //Date     : 2014-08-14
     7 
     8 #ifndef __HEX_STRING_H__
     9 #define __HEX_STRING_H__
    10 
    11 #include <string>
    12 
    13 namespace Qing
    14 {
    15     class HexString
    16     {
    17     public:
    18 
    19         HexString(void);
    20         ~HexString(void);
    21 
    22         int HexCharToInt(char ch) const;
    23         std::string AddSpace(const std::string &SourcesString, int Interval) const;
    24 
    25         void HexToString(const unsigned char* HexCharArray, int ArraySize, unsigned char* TargetBuffer, int BufferSize) const;
    26         void StringToHex(std::string &MyString, const unsigned char* SourcesCharArray, int ArraySize, bool IsLowerCase) const;
    27     };
    28 }
    29 
    30 #endif
     1 #include "StdAfx.h"
     2 #include "HexString.h"
     3 
     4 namespace Qing
     5 {
     6     HexString::HexString(void)
     7     {
     8     }
     9 
    10     HexString::~HexString(void)
    11     {
    12     }
    13 
    14     int HexString::HexCharToInt(char Ch) const
    15     {
    16         if(Ch >= '0' && Ch <= '9') return (Ch - '0');
    17         if(Ch >= 'A' && Ch <= 'F') return (Ch - 'A' + 10);
    18         if(Ch >= 'a' && Ch <= 'f') return (Ch - 'a' + 10);
    19 
    20         return 0;
    21     }
    22 
    23     std::string HexString::AddSpace(const std::string &SourcesString, int Interval) const
    24     {
    25         std::string Space(" ");
    26         std::string TempString = SourcesString;
    27 
    28         for(std::string::size_type Index = Interval; Index < TempString.size(); Index += Interval)
    29         {
    30             TempString.insert(Index, Space);
    31             ++Index;
    32         }
    33 
    34         return TempString;
    35     }
    36 
    37     void HexString::HexToString(const unsigned char* HexCharArray, int ArraySize, unsigned char* TargetBuffer, int BufferSize) const
    38     {
    39         memset(TargetBuffer, 0, BufferSize);
    40 
    41         for(int Index = 0; Index < ArraySize; Index+=2)
    42         {
    43             TargetBuffer[Index/2] = static_cast<char>(((HexCharToInt(HexCharArray[Index]) << 4) | HexCharToInt(HexCharArray[Index+1])));
    44         }
    45     }
    46 
    47     void HexString::StringToHex(std::string &MyString, const unsigned char* SourcesCharArray, int ArraySize, bool IsLowerCase) const
    48     {
    49         MyString.clear();
    50         std::string FlagString(IsLowerCase ? "0123456789abcdef" : "0123456789ABCDEF");
    51 
    52         int b = 0;
    53         for(int i = 0; i < ArraySize; i++)
    54         {
    55             b = 0x0f & (SourcesCharArray[i] >> 4);
    56             MyString.append(1, FlagString.at(b));
    57 
    58             b = 0x0f & SourcesCharArray[i];
    59             MyString.append(1, FlagString.at(b));
    60         }
    61     }
    62 }
  • 相关阅读:
    [CF1051F] The Shortest Statement
    [国家集训队] 墨墨的等式
    [CF558E] A Simple Task
    [洛谷P1349] 广义斐波那契数列
    [TJOI2009] 猜数字
    [洛谷P3403] 跳楼机
    学习力
    启动流程
    《鸟哥Linux》笔记——磁盘分区
    indexDB数据库
  • 原文地址:https://www.cnblogs.com/zwq1011/p/4525388.html
Copyright © 2020-2023  润新知