CString字符串转换为十六进制字符串

最近在做项目时遇到这个问题,比如将汉字“冲”转换后为“51B2”,程序使用的是unicode字符集,下面是通过查资料后整理的解决方法:

//---------------------------------------------------------------------
//函数:W2C
//功能:将16位wchar_t转换为 8位char[2]
//参数:w_cn为待转换的16位字符,c_cn[]为转换后的8位字符
//备注:wchar_t的高位字节应该存储在char数组的低位字节
//作者:chuchong

//---------------------------------------------------------------------
void StyleConvert::W2C(wchar_t w_cn , char c_cn[])
{   
    //following code convert wchar to char
    c_cn[0] = w_cn >> 8 ;
    c_cn[1] = (char)w_cn ;
}
//-------------------------------------------------------------------
//函数:ConvertWCHARToHex
//功能:将16位字符串转换为十六进制字符串
//参数:待转换的字符串,字符串长度
//返回值:转换后的字符串
//作者:chuchong
//-------------------------------------------------------------------
CString StyleConvert::ConvertWCHARToHex(CString Data, long nDataLength)
{
 CString sResult("");
 for (long nLoop=0; nLoop<nDataLength; nLoop++)
 {
  wchar_t ch = Data.GetAt(nLoop);
  //将wchar_t转换为char[2]
  char c_cn[2]={'0'};
  W2C(ch,c_cn);
  
  static const char *hex = "0123456789ABCDEF";
  for(int i=0;i<2;i++)
  {
   unsigned char chHexA = hex[((unsigned char)(c_cn[i]) >> 4) & 0x0f];
   unsigned char chHexB = hex[(unsigned char)(c_cn[i]) & 0x0f];
   sResult += (char)chHexA;
   sResult += (char)chHexB;
  }
 }
 return sResult;
}

posted on   冲虚道长  阅读(2349)  评论(1编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

导航

< 2009年4月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 1 2
3 4 5 6 7 8 9
点击右上角即可分享
微信分享提示