这些简单的转换是用的比较频繁的, 因此将这些功能全部封装在一个类中

头文件

 #pragma once
#include <stdlib.h>
#include <string>
#include "tchar.h"
#include "windows.h"
using namespace std;
enum TRANSFORM
{
SINGLECHAR, //单字节转换 eg:0x2121 => 33 33
ALLCHAR, //所有字节转换 eg:0x2121 => 8481
};
class Transform
{
public:
Transform(void);
~Transform(void); public:
string HexStrToAsciiStr(string strValue);
string AsciiStrToHexStr(string strValue);
string HexToDescInt(string strVaule, TRANSFORM);
string DescIntToHex(string strValue);
string TCharToString(TCHAR* TValue);
void StringToTChar(string strValue, TCHAR* DestTchar);
private:
string strRepalce(string& strValue, string strSrc, string strDest);
};

cpp文件

 #include "Transform.h"
#pragma warning(disable:4996) Transform::Transform(void)
{ } Transform::~Transform(void)
{ } string Transform::HexStrToAsciiStr(string strValue)
{
string strTemp;
if(strValue.find("0x") != string::npos || strValue.find("0X") != string::npos)
{
if(strValue.find("0x") != string::npos)
strTemp = strRepalce(strValue, "0x", "");
else
strTemp = strRepalce(strValue, "0X", "");
}
if(strTemp.length() % != )
strTemp.insert(, , '');
string strRet;
int temp = ;
for(int i = ; i < strTemp.length(); i++)
{
int flag = (i % == ) ? : ;
if(strTemp.c_str()[i] > '' && strTemp.c_str()[i] < '')
{
temp += (strTemp.c_str()[i] - '')*flag;
}
else if(strTemp.c_str()[i] == 'a' || strTemp.c_str()[i] == 'A')
{
temp += (*flag);
}
else if(strTemp.c_str()[i] == 'b' || strTemp.c_str()[i] == 'B')
{
temp += (*flag);
}
else if(strTemp.c_str()[i] == 'c' || strTemp.c_str()[i] == 'C')
{
temp += (*flag);
}
else if(strTemp.c_str()[i] == 'd' || strTemp.c_str()[i] == 'D')
{
temp += (*flag);
}
else if(strTemp.c_str()[i] == 'e' || strTemp.c_str()[i] == 'E')
{
temp += (*flag);
}
else if(strTemp.c_str()[i] == 'f' || strTemp.c_str()[i] == 'F')
{
temp += (*flag);
}
if(i % != )
{
strRet+=temp;
temp =;
}
}
return strRet;
} string Transform::AsciiStrToHexStr(string strValue)
{
if(strValue.length() == )
return "";
char Src[] = { };
strcpy_s(Src, strValue.c_str());
int len = strValue.length();
char* Dest = (char*)calloc(*len +, sizeof(char));
for( int i = , j = ; i < strlen(strValue.c_str()); i++ )
{
char HiHalf = Src[i] >> ;
char LoHalf = Src[i] & 0x0F;
Dest[j++] = ( HiHalf <= ) ? ( HiHalf + '' ) : ( HiHalf - + 'A' );
Dest[j++] = ( LoHalf <= ) ? ( LoHalf + '' ) : ( LoHalf - + 'A' );
}
string strRet = Dest;
delete[] Dest;
Dest = NULL;
return strRet;
} string Transform::HexToDescInt(string strVaule, TRANSFORM tfType)
{
if(strVaule.find("0x") != string::npos || strVaule.find("0X") != string::npos)
{
if(strVaule.find("0x") != string::npos)
strVaule = strRepalce(strVaule, "0x", "");
else
strVaule = strRepalce(strVaule, "0X", "");
} if(strVaule.length() % != )
strVaule.insert(, , '');
if(strVaule.length() == )
return "";
string strRet;
unsigned long iValue = ;
switch(tfType)
{
case ALLCHAR:
{
for(int i = ; i < strVaule.length(); i++)
{
iValue += (strVaule.c_str()[i] - '') << *(strVaule.length() - i -);
}
strRet = to_string(iValue);
}break;
case SINGLECHAR:
{
for(int i = ; i < strVaule.length(); i+=)
{
iValue += (strVaule.c_str()[i] - '') << ;
if(strVaule.length() >= i+)
{
iValue += (strVaule.c_str()[i+] - '');
}
strRet += (to_string(iValue) + " ");
iValue = ;
}
}break;
default:
break;
}
return strRet;
} string Transform::DescIntToHex(string strValue)
{
if(strValue.length() == )
return "";
if(strValue.length() % != )
strValue.insert(, , '');
char temp[] = { };
int iValue = atoi(strValue.c_str());
itoa(iValue, temp, );
string strRet = "0x";
strRet+= temp;
return strRet;
} string Transform::strRepalce(string& strValue, string strSrc, string strDest)
{
string::size_type pos = ;
string::size_type srclen = strSrc.size();
string::size_type dstlen = strDest.size(); while( (pos=strValue.find(strSrc, pos)) != std::string::npos )
{
strValue.replace( pos, srclen, strDest );
pos += dstlen;
}
return strValue;
} string Transform::TCharToString(TCHAR* TValue)
{
string strRet;
int iLength ;
//获取字节长度
iLength = WideCharToMultiByte(CP_ACP, , TValue, -, NULL, , NULL, NULL);
//将tchar值赋给_char
char* szChar = (char*)calloc(iLength, sizeof(char));
WideCharToMultiByte(CP_ACP, , TValue, -, szChar, iLength, NULL, NULL);
strRet = szChar;
delete[] szChar;
szChar = NULL;
return strRet;
}
void Transform::StringToTChar(string strValue, TCHAR* DestTchar)
{
int iLength ;
iLength = MultiByteToWideChar (CP_ACP, , strValue.c_str(), strlen (strValue.c_str()) + , NULL, );
MultiByteToWideChar (CP_ACP, , strValue.c_str(), strlen (strValue.c_str()) + , DestTchar, iLength) ;
}

测试文件

 #include<stdio.h>
#include "Transform.h" int main()
{
Transform m_obj;
string value= "3135353734414EmM";
string Hex = m_obj.AsciiStrToHexStr(value);
printf("Hex = %s \n", Hex.c_str()); string asic = m_obj.HexStrToAsciiStr("0x303132343335363738394d5e6f20212223");
printf("asci= %s\n", asic.c_str()); string DecInt = m_obj.HexToDescInt("0x11122", ALLCHAR);
printf("DesInt = %s \n", DecInt.c_str());
DecInt = m_obj.HexToDescInt("0x11122", SINGLECHAR);
printf("DesInt = %s \n", DecInt.c_str()); string hex = m_obj.DescIntToHex("");
printf("hex = %s\n", hex.c_str()); string szChar = m_obj.TCharToString(_T("Hello World"));
printf("szChar = %s\n", szChar.c_str()); TCHAR tempChar[] ={ };
m_obj.StringToTChar("Hello C++", tempChar); printf("tChar = %s\n", (char*)tempChar);
getchar();
return ;
}
16进制字符串转10进制
调用系统函数pow(int x, int y)
x: 基数 y:指数 int HexToInt(string s)
{
//STL 函数将字符串全部转大写
transform(s.begin(), s.end(), s.begin(), ::toupper);
int count = s.length();
int sum = 0;
for (auto it : s)
{
//A 的assic 为65. it-55:表示A~F转10~15
int flag = (it >= 65) ? (it - 55) : (it - 48);
if (flag < 0 || flag > 15) continue;
sum += flag *pow(16, --count);
}
printf("sum = %d\n", sum);
return sum;
}

  

PS: 代码写的有点low, 仅供参考 ~_~

C++ 10进制, 16进制, ASCII码, 单字节与多字节的相互转换的更多相关文章

  1. js 解密 16进制转10进制,再取ascii码的对应值

    如:\x64 对应 16进制 0x64 转10进制就是 0x64.toString(10) == 100, 查对应的ascii码表得到 ‘d' <div id=code style='displ ...

  2. ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记

    字符编码的发展历史 Unicode和UTF-8有何区别? 在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番. 一个字节:最初一个字节的标准是混乱的, ...

  3. Oracle中如何进行进制转换(2进制,10进制,16进制)

    1.16进制转换为10进制 可以通过to_number函数实现 SQL> select to_number('19f','xxx') from dual; TO_NUMBER('19F','XX ...

  4. java中 8进制 10进制 2进制 16进制 相互转换

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  5. Delphi - 10进制16进制相互转换

    10进制转16进制 使用IntToHex可以实现十进制到十六进制的转换,注意这里的参数有两个,第一个表示需要被转换的10进制数,第二个表示转换后用几位来显示16进制数. 代码如下: function ...

  6. JS吧数字转成2进制 8进制16进制数据

    ; number.toString(); //转成2进制 number.toString();//转成8进制 number.toString();//转成10进制 number.toString(); ...

  7. 关于 NSData 的数据类型(2进制,16进制之间)及深入剖析(转)

    . NSData 与 NSString NSData-> NSString NSString *aString = [[NSString alloc initWithData:adataenco ...

  8. 关于 NSData 的数据类型(2进制,16进制之间)及深入剖析

    1. NSData 与 NSString NSData-> NSString NSString *aString = [[NSString alloc initWithData:adataenc ...

  9. c#与js中10进制16进制的转化,记录防忘

    js: var param="11"; param=parseInt(param,16);  //17 param=parseInt(param,10);  //11 //后面的参 ...

随机推荐

  1. 简述vue props和非props的2个特性

    props的2个特性 ①:父组件通过属性的方式传值(比如下面截图中的content)给子组件,content不会显示在DOM节点中                       ②:父组件向子组件传递值 ...

  2. 【大数据】SparkSql 连接查询中的谓词下推处理 (二)

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/II48YxGfoursKVvdAXYbVg作者:李勇 目录:1.左表 join 后条件下推2.左表j ...

  3. matplotlib的使用——pie(饼图)的使用

    在我们进行数据分析的时候需要对得出的数据进行可视化,因此我们需要引入第三方包来帮助我们进行可视化分析,在这里使用matplotlib 一.安装 使用指令[pip install matplotlib] ...

  4. MySQL for OPS 05:日志管理

    写在前面的话 日志是作为用户排查服务问题的重要依据,在 MySQL 中日志可以分为几类,各自产生着不同的作用.如 error log / bin log / slow log 等.很多时候优化数据库的 ...

  5. 带你认识MySQL sys schema

    前言:  MySQL 5.7中引入了一个新的sys schema,sys是一个MySQL自带的系统库,在安装MySQL 5.7以后的版本,使用mysqld进行初始化时,会自动创建sys库. sys库里 ...

  6. 大一结业项目之一(C#晨曦超市管理系统 )

                                             C#晨曦超市管理系统                            我现是湖南工程职业技术学院大一的学生,很快 ...

  7. Appium基于PO模型的自动化测试(Python)

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  8. springcloud分布式事务Atomikos实例

    0.JTA(Java Transaction Manager)的介绍 (1)jta与jdbc 简单的说 jta是多库的事务 jdbc是单库的事务 (2)XA与JTA XA : XA是一个规范或是一个事 ...

  9. JavaScript AJAX PHP

    AJAX PHP示例 AJAX用于创建更多交互式应用程序. 以下示例演示了当用户在输入字段中键入字符时,网页如何与Web服务器通信: <!DOCTYPE html> <html> ...

  10. 深入浅出《设计模式》之工厂模式(C++)

    前言 模式介绍 在之前简单工厂模式中,我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则.如果在面馆中添加了烤海参,那将会修改waiter工厂类.违背了类内封闭原则. 还以面馆为例,现在两种面,用一个 ...