char buf[256];
CString str,outStr;
--省略buf赋值
for (int i=0;i<256;i++)
{
str.Format("%2X",buf[i]);
outStr+=str;
}
结果发现buf[0-9]的转换是对的,为XX
buf[10]以后则为 FFFFFFXX
哪里出了问题呢?
CString str,outStr;
--省略buf赋值
for (int i=0;i<256;i++)
{
str.Format("%2X",buf[i]);
outStr+=str;
}
结果发现buf[0-9]的转换是对的,为XX
buf[10]以后则为 FFFFFFXX
哪里出了问题呢?
你需要把 buf[256] 中全部填充成你自己的特定内容在看看?
CString outStr;
memcpy(outStr.GetBuffer(),buf,256);
for (int i=0;i<256;i++)
{
str.Format("%2X",(BYTE)buf[i]);
outStr+=str;
}
str.Format("%s",buf);如果你是想把buf中的数据以十六进制的形势存储在str中,
就用 abomber2(走来走去) 的方法把
buf[10]以后则为 FFFFFFXX可能是你赋值没有对所有元素进行附值。你只对前10个元素进行了赋值。
猜测没有赋值的答案是不对的
要的就是16进制---------------------
现在的问题变成
如果加(BYTE)强制转换得到了正确的结果
为什么0-9不需要而10以后却需要?
char 是有符号的
BYTE是无符号
memset(buf,0,sizeof(buf));----buf 赋值。for (int i=0;i<256;i++)
{
str.Format("%2X",buf[i]&0x00FF);
outStr+=str;
}
CString str;
str.Empty(); //确保str的长度为0.
for (int i=0;i<256;i++)
str.Insert(i,buf[i]); //从0索引位插入buf数组中的字符.希望这短短几行代码对你有帮助.
#include <afxwin.h>void main()
{
char buf[256];
CString str,outStr;
for(int i=0; i<25; i++)
buf[i] = 'a'; buf[i] = '\0';
for (i=0; i<strlen(buf); i++)
{
str.Format("%2X",buf[i]);
outStr+=str;
}
cout << outStr << endl;
}