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

头文件

 #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. 镭神激光雷达对于Autoware的适配

    1. 前言 我们的自动驾驶采用镭神激光雷达,在使用Autoware的时候,需要对镭神激光雷达的底层驱动,进行一些改变以适配Autoware. 2. 修改 (1)首先修改lslidar_c32.laun ...

  2. C# 委托补充01

    上一篇文章写了委托的最基本的一些东西,本篇咱们扯扯委托其他的东西. 示例1插件编程 根据对委托的理解,委托可以把一个方法当作参数进行传递,利用这个特性我们可以使用委托,实现插件编程. public d ...

  3. iis7 下配置 ASP.NET MVC 项目遇到的问题 (WIN7 64位 旗舰版 第一次配置站点)

    转自 https://www.cnblogs.com/Leo_wl/p/3866625.html,再次感谢 指定的目录或文件在 Web 服务器上不存在. URL 拼写错误. 某个自定义筛选器或模块(如 ...

  4. Java引用类型原理深度剖析,看完文章,90%的人都收藏了

    本文为synchronized系列第二篇.主要内容为分析偏向锁的实现. 偏向锁的诞生背景和基本原理在上文中已经讲过了. 本文将分为几块内容: 1.偏向锁的入口 2.偏向锁的获取流程 3.偏向锁的撤销流 ...

  5. GIT版本管理工具教程

    目录 GIT版本管理工具教程 一 Git初始化 二 简单指令使用 基本操作 简单总结 三 Git进阶 Git三大区域 Git回滚 Git分支 Git工作流 四 Github代码管理仓库 第一步:注册G ...

  6. 腾讯WeTest携手拉夏贝尔共筑电商小程序安全壁垒

    上海拉夏贝尔服饰股份有限公司成立于1998年,是中国快速发展的多品牌时尚运营企业.La Chapelle品牌创立初衷正是希望通过精美别致的时装设计,将法式优雅精致的风情元素和对生活的认知感悟传递给都市 ...

  7. sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?

    sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?搜索了下都是说怎么隐藏的,隐藏后怎么恢复显示的没找到看进程还在运行,但调不出来看运行结果了,console ...

  8. Electron使用时拦截HTTP请求的解决方案

    背景 最近在做一个Web和Electron共用一份代码的工程,由于使用到了第三方的库(我们是在线地图),该库的认证方式是请求时加key,并且它在后台会校验referer. 于是问题就来了,Electr ...

  9. Scrum 冲刺第三篇

    是我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1  27号站立式会议照片: 1.2  昨天已完成的事情 团队成员 今天计划完成的任务 黄思扬 活动平台首页(前端) ...

  10. Fundebug录屏插件更新至0.5.0,新增domain参数

    摘要: 通过配置domain来保证"视频"的正确录制 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 ...