C++用到的数据类型转换问题

以下说明的所有类型转换均在MFC框架下实现。

1、CString 转成 DWORD

需要的头文件:#include<stdlib.h>

CString str = L"123456";

DWORD dw;

dw = _tcstoul(str, NULL, 16);

此时的16,代表了十六进制,当前也可以换算成别的进制。

注意:一般这种转换方法使用在了颜色转换中。为什么这么说呢?

假设我们要给一个控件设置自定义颜色值时,美工部门给出了一个类似于这种写法的颜色值,如:#FF0000。我们就需要将这个16进制转成RGB形式。这个算法不是这章节的重点。如果有需求学习的,留言告诉我,我会更新出来。

2:CString 转成 std::string

CString str = L"123";

CStringA strA = CT2A(str);

std::string sData(strA);

3:CString 转成 std::wstring

CString str = L"mm";

std::wstring wstr = str.GetString();

4:CString 转成 int

CString str = L"12";

int n = _ttoi(str);

5:CString 转成 char*

char* ch_data;

CStringA strDataA;

CString str = L"需要转换的文本";

strDataA = CT2A(str);

ch_data = strDataA.GetBuffer();

/*

中间使用char*的代码

*/

strDataA.ReleaseBuffer();

6:std::string 转成 CString

std::string s = "123";

CString strChange = L"";

strChange = s.c_str();

7:std::string 转成 LPCWSTR

这个功能一般用到了写公共库时,想要让代码能够适应在MFC以及WIN32环境中任意切换时,有些函数的API是LPCWSTR时,无法用MFC框架中的CString表示时,就需要用到这个转换函数了

LPCWSTR CFFmpegDecoder::stringToLPCWSTR(std::string sData)
{
  size_t size = sData.length();
  wchar_t *buffer = new wchar_t[size + 1];
  MultiByteToWideChar(CP_ACP, 0, sData.c_str(), size, buffer, size * sizeof(wchar_t));
  buffer[size] = 0;
  return buffer;
}

8:std::wstring 转成 CString

std::wstring wstr = "需要转换的文字";

CString str = wstr.c_str();

9:std::wstring 转成 int

std::wstring wstr = "12";

int n = _wtoi(wstr);

10:int 转成 std::string

需要用到的头文件#include <sstream>

int n = 123;

std::stringstream ss;

ss << n;

std::string sResult = ss.str();

11:float 转成 std::string

std::stringstream buf;
buf.precision(1); //覆盖默认精度
buf.setf(std::ios::fixed); //保留小数位
buf << fData;
std::string str;
str = buf.str();

12:const char* 转成 CString

CString CXXXDlg::ConstCharToCString(const char* ch)
{
  char *buf = new char[strlen(ch)+1];
  memset(buf , 0 , sizeof(ch));
  strcpy(buf , ch);
  CString  strName ; 
  strName = buf;
  delete []buf;
  return strName ;
}

13:CString 转成 char[]

BOOL	CStringToChar(CString str , char ch[])
{
  char* tmpch ;
  int wLen = WideCharToMultiByte(CP_ACP , 0 , str , -1 , NULL , 0 , NULL , NULL);
  tmpch = new char[wLen + 1 ];
  WideCharToMultiByte(CP_ACP , 0 , str ,-1 ,tmpch , wLen , NULL , NULL );
  for(int i = 0 ; i < wLen ; ++i)
	ch[i] = tmpch[i];
}

14:std::string 转成 std::wstring

std::wstring MyXXXDlg::stringToWstring(const std::string str)
{
  std::string curLocale = setlocale(LC_ALL, "chs");        // curLocale = "C";
  const char* _Source = str.c_str();
  size_t nDstCharSetLen = (str.size() + 1) * 2;
  wchar_t *_Dest = new wchar_t[nDstCharSetLen];
  memset(_Dest, 0, nDstCharSetLen);
  size_t nLen = 0;
  mbstowcs_s(&nLen, _Dest, nDstCharSetLen, _Source, nDstCharSetLen);
  std::wstring result = _Dest;
  delete[]_Dest;
  setlocale(LC_ALL, curLocale.c_str());
  return result;
}

15:std::wstring 转成 std::string

std::string MyXXDlg::wstringToString(const std::wstring ws)
{
  std::string curLocale = setlocale(LC_ALL, "chs");// curLocale = "C";
  const wchar_t* _Source = ws.c_str();
  size_t _Dsize = 2 * (ws.size() + 1);
  char *_Dest = new char[_Dsize];
  memset(_Dest,0,_Dsize);
  size_t nSize = 0;
  wcstombs_s(&nSize,_Dest,_Dsize,_Source,_Dsize);
  std::string result = _Dest;
  delete []_Dest;
  setlocale(LC_ALL, curLocale.c_str());
  return result;
}

16:字符串转成十六进制字符串

std::string MyXXXDlg::stringToHexString(std::string sData)
{
  const std::string hex = "0123456789ABCDEF";
  std::stringstream ss;
  for (std::string::size_type i = 0 ; i < sData.size() ; i++)
  {
    //没有分割符
    ss << hex[(unsigned char)sData[i] >> 4] << hex[(unsigned char)sData[i] & 0xf] << "";
   }
  return ss.str();
}

好了,目前我用到的也就这几个,如果有我还会继续更新,点个赞支持一下吧~

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糯诺诺米团

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值