十六进制字符串转换为无符号8位字节数组 请教一下大家,问题可能有点幼稚,我想把一个CString字符串的字符(这是返回值)转换为无符号8位字节数组,我要用里面的数据绘图,请教一下怎么转换呢,先谢谢回答问题的人了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void String2Hex(const CString &Str, UCHAR *Buf, ULONG &Len){ UCHAR OneData = 0; Len = 0; int ChL = 0; for (int i = 0; i < Str.GetLength(); i++) { char C = static_cast<char>(Str.GetAt(i)); if (C == ' ' || C == ':' || C == '-') { if (ChL != 0) { Buf[Len++] = OneData; ChL = 0; } continue; } OneData <<= 4; OneData += Char2Hex(C); ChL++; if (ChL == 2) { Buf[Len++] = OneData; ChL = 0; } }} CString的GetAt()然后调用strtol();具体:CString strTemp = _T("1234");byte byTemp = (byte)strtol(strTemp.GetAt(i));这个意思是你每位都是你要分离的。不知道和你想要的对不? 2楼的朋友:strtol的参数不是一个吧?呵呵比如我的字符串是CString str="DBBBBA@@@?????" ----(十六进制)我要把她转换为无符号8位字节数组 2楼的思路是对的,用atoi也可以,具体的楼主自己考虑用什么函数了 strtol(strTemp.GetAt(i), NULL, 16) short Str2Hex(const char* szData, char* szOut, int nOutMaxLen){ if ((szOut == NULL) || (szData == NULL)) { return -1; } memset(szOut, 0, nOutMaxLen); int nLen = strlen(szData); char szTemp[20]; int nCount = 0; int i; for (i = 0; i < nLen; i += 2) { if (nCount >= nOutMaxLen) { return -2; } memset(szTemp, 0, sizeof(szTemp)); szTemp[0] = szData[i]; szTemp[1] = szData[i+1]; szOut[i/2] = (unsigned char)strtol(szTemp, NULL, 16); nCount++; } return 0;} 楼上的朋友,还是不对,GetAt得到的是具体的字符,而strtol函数的第一个参数是const char* 那你是unicode的了?呵呵。 换成_tcstol就可以了。 求教怎样获取类的变量 C++/VC/MFC 学习交流群:31761897 马上满200人了 大家给推荐个工具栏例子 插入以CListView为基类的新类,编译报错 如何实现 treectrl的叶节点可以拖动?? 50分求助:vc程序中,运行时出错说是少了一个头文件,但是头文件在程序中,这是怎么回事 服务端SOCKET怎么知道网络断开? 【【入门问题】】组件和控件是一个东西吗???ActiveX算哪类??如何把我写好的MFC程序做成一个ActiveX呢??? 一个关于类型转换的问题(char[] to LPCTSTR) 请大家帮忙呀! 摄像头采集数据 vs2010编译成功 却exe无法运行
void String2Hex(const CString &Str, UCHAR *Buf, ULONG &Len)
{
UCHAR OneData = 0;
Len = 0;
int ChL = 0;
for (int i = 0; i < Str.GetLength(); i++)
{
char C = static_cast<char>(Str.GetAt(i));
if (C == ' ' || C == ':' || C == '-')
{
if (ChL != 0)
{
Buf[Len++] = OneData;
ChL = 0;
}
continue;
}
OneData <<= 4;
OneData += Char2Hex(C);
ChL++;
if (ChL == 2)
{
Buf[Len++] = OneData;
ChL = 0;
}
}
}
然后调用strtol();具体:
CString strTemp = _T("1234");
byte byTemp = (byte)strtol(strTemp.GetAt(i));这个意思是你每位都是你要分离的。不知道和你想要的对不?
strtol的参数不是一个吧?呵呵
比如我的字符串是
CString str="DBBBBA@@@?????" ----(十六进制)
我要把她转换为无符号8位字节数组
strtol(strTemp.GetAt(i), NULL, 16)
{
if ((szOut == NULL) || (szData == NULL))
{
return -1;
}
memset(szOut, 0, nOutMaxLen);
int nLen = strlen(szData);
char szTemp[20];
int nCount = 0;
int i;
for (i = 0; i < nLen; i += 2)
{
if (nCount >= nOutMaxLen)
{
return -2;
}
memset(szTemp, 0, sizeof(szTemp));
szTemp[0] = szData[i];
szTemp[1] = szData[i+1];
szOut[i/2] = (unsigned char)strtol(szTemp, NULL, 16);
nCount++;
}
return 0;
}
那你是unicode的了?呵呵。 换成_tcstol就可以了。