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

头文件

 #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. 阿里云CentOS7.x安装nodejs及pm2

    对之前文章的修订 您将了解 CentOS下如何安装nodejs CentOS下如何安装NVM CentOS下如何安装git CentOS下如何安装pm2 适用对象 本文档介绍如何在阿里云CentOS系 ...

  2. 后端必备的 Git 分支开发规范指南 转

    原文链接 作者:稻草叔叔 http://juejin.im/post/5b4328bbf265da0fa21a6820 点击上方 "后端技术精选",选择 "置顶公众号&q ...

  3. Serverless 的喧哗与骚动(一)附Serverless行业发展回顾

    作者 | 阿里中间件高级技术专家 许晓斌 <Maven实战>作者,曾负责 AliExpress 微服务架构演进,现在负责阿里集团 Serverless 技术研发落地. 导读:从 2016 ...

  4. WebApi安全性 参数签名校验(结合Axios使用)

    接口参数签名校验,是WebApi接口服务最重要的安全防护手段之一. 结合项目中实际使用情况,介绍下前后端参数签名校验实现方案. 签名校验规则 http请求,有两种传参形式: 1.通过url传参,最常见 ...

  5. 关于如何提高缓存命中率(redis)

    一.缓存命中率的介绍 命中:可以直接通过缓存获取到需要的数据. 不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作.原因可能是由于缓存中根本不存在,或者缓存已经过期. 通常 ...

  6. 2019-3-20-UWP-How-to-custom-RichTextBlock-right-click-menu

    原文:2019-3-20-UWP-How-to-custom-RichTextBlock-right-click-menu title author date CreateTime categorie ...

  7. cmd 运行bcp 提示:'bcp' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    这个问题的原因是:bcp.exe文件的路径不在环境变量中, 我的环境:Windows10 ,SQL server2016(D:) 1.首先查找你的SQL Server2016的安装位置 找到快捷方式, ...

  8. Java生鲜电商平台-物流配送的设计与架构

    Java生鲜电商平台-物流配送的设计与架构 说明:由于Java开源生鲜电商平台是属于自建物流系统,也就是买家下的单,需要公司派物流团队进行派送.            业务需求中买家的下单时间控制在: ...

  9. PHP基础(谈一谈Session&Cookie)

    cookie和sessiond的主要区别 (1).保存位置稍有区别 cookie数据存放在客户的浏览器上,服务器端不用保存.session数据放在服务器上,本地内存也有一份. (2).安全性不同 co ...

  10. SpringBoot的学习一:入门篇

    SpringBoot是什么: SpringBoot是Spring项目中的一个子工程,是一个轻量级框架. SpringBoot框架中有两个个非常重要的策略:开箱即用和约定优于配置 一.构建工程 1.开发 ...