CString存到unsigned char数组中出错了

南空 2011-04-11 09:25:34
unsigned char CString2Hex(CString var)
{
unsigned char len = var.GetLength();
unsigned char res=0;
unsigned char tmp=0;
char f[2];
for(int i = len;i>0;i--)
{

memset(f,0,2);
sprintf(f,"%c",var.GetAt(len-i));
tmp = atoi(f)<<(4*(i-1));
res+=tmp;
}
return res;
}
这是VC中的一个全局函数,当调用它时
unsigned char Data[16]="0";
CString filestr;
for(int i=0;i<15;i++)
{
Data[i]=CString2Hex(filestr.Mid(i*2,2));
}
问题:
当filestr为498496584244854854564185493854时,正确得到Data[0]=49,Data[1]=84......
但是当filestr为CDABDCABDCEBDCEDABDCEABCEDABED时,得不到正确数据????
请高手指教,谢谢了。
...全文
102 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-04-11
  • 打赏
  • 举报
回复
和你要做的不太一样。和你的是相反的操作。

[Quote=引用 3 楼 luciferisnotsatan 的回复:]

C/C++ code
void cnvt(CString in, wchar_t *out)
{
size_t len = in.GetLength();
TCHAR tmp[5] = {0};
TCHAR *endPtr;
TCHAR *p = in.GetBuffer();
int i,j;

for(i = 0,j=0; i < len; ……
[/Quote]
luciferisnotsatan 2011-04-11
  • 打赏
  • 举报
回复
void cnvt(CString in, wchar_t *out)
{
size_t len = in.GetLength();
TCHAR tmp[5] = {0};
TCHAR *endPtr;
TCHAR *p = in.GetBuffer();
int i,j;

for(i = 0,j=0; i < len; i+=4,j++)
{

wcsncpy(tmp,p+i,4);
out[j] = wcstol(tmp,&endPtr,16);
}
in.ReleaseBuffer();
out[j] = '\0';
}


过去写的一个宽字节版本,lz自己改下
delphiwcdj 2011-04-11
  • 打赏
  • 举报
回复
试试
int nLen=filestr.GetLength();
unsigned char *szBuffer = new unsigned char[nLen+1];
strcpy(szBuffer, (unsigned char*)filestr.GetBuffer(0));
luciferisnotsatan 2011-04-11
  • 打赏
  • 举报
回复
用var.GetBuffer得到c风格的字符串,用完后记得ReleaseBuffer

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧