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

头文件

 #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. WinForm 窗体间传递数据

    前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...

  2. Django学习笔记(11)——开发图书管理页面

    一,项目题目: 开发图书管理页面 该项目主要练习Django对多个数据库进行增删改查的操作. 二,项目需求: 基础需求:75% 1. 列出图书列表.出版社列表.作者列表 2. 点击作者,会列出其出版的 ...

  3. laravel 广播细节讲解

    1.应用场景 1.通知(Notification) 或 信号(Signal) 2.通知是最简单的示例,也最经常用到.信号也可看作是通知的一种展现形式,只不过信号没有UI而已. 3.Activity S ...

  4. C#通过PInvoke调用c++函数的备忘录

    目前知道的情况被调用的C/C++函数只能是全局函数 不能调用类中的成员方法 被调用的C函数必须使用extern “C“包含,保证采用的导出函数名生成规则和.NET一致 函数调用约定通常使用WINAPI ...

  5. VS2019已还原ReSharper的功能

    本文只谈论 ReSharper 的那些常用功能中,Visual Studio 2019 能还原多少,主要提供给那些正在考虑不使用 ReSharper 插件的 Visual Studio 用户作为参考. ...

  6. Django forms 主要的标签介绍

    修改 forms.py from django import forms as DForms from django.forms import fields from django.forms imp ...

  7. CentOs 7.*中配置安装phpMyAdmin的完整步骤记录

    phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的资料库管理工具.下面这篇文章主要给大家介绍了关于CentOs 7.*中配置安装phpMyAdmin的相关资 ...

  8. CentOS6.7安装Oracle数据库

  9. GCC 预处理,汇编,编译,链接,连接静态库,动态库

    gcc Record gcc -E file1.c > output gcc -E file1.c -o file1.i gcc -S file1.i -o file1.s gcc -S fil ...

  10. nginx geoip_module 地域信息读取

    1.安装geoip yum -y install nginx-module-geoip 2.安装完成后在cd /etc/nginx/modules/ 能看到安装的模块 # cd /etc/nginx/ ...