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
哪里出了问题呢?

解决方案 »

  1.   

    你的buf[256]中内容本来就不是你的内容?
    你需要把 buf[256] 中全部填充成你自己的特定内容在看看?
      

  2.   

    buf里的内容本身就有问题?
      

  3.   

    char buf[256];
    CString outStr;
    memcpy(outStr.GetBuffer(),buf,256);
      

  4.   

    试试这样
    for (int i=0;i<256;i++)
    {
      str.Format("%2X",(BYTE)buf[i]);
      outStr+=str;
    }
      

  5.   

    没有明白lz得意思.如果只是想把数组的内容拷贝到cstring中,好一点的写法是
    str.Format("%s",buf);如果你是想把buf中的数据以十六进制的形势存储在str中,
    就用 abomber2(走来走去) 的方法把
      

  6.   

    结果发现buf[0-9]的转换是对的,为XX
    buf[10]以后则为 FFFFFFXX可能是你赋值没有对所有元素进行附值。你只对前10个元素进行了赋值。
      

  7.   

    abomber2(走来走去) 的方法是对的,原因还不知道
    猜测没有赋值的答案是不对的
    要的就是16进制---------------------
    现在的问题变成
    如果加(BYTE)强制转换得到了正确的结果
    为什么0-9不需要而10以后却需要?
      

  8.   

    补充一下
    char 是有符号的
    BYTE是无符号
      

  9.   


    memset(buf,0,sizeof(buf));----buf 赋值。for (int i=0;i<256;i++)
    {
      str.Format("%2X",buf[i]&0x00FF);
      outStr+=str;
    }
      

  10.   

    char buf[256];
    CString str;
    str.Empty(); //确保str的长度为0.
    for (int i=0;i<256;i++)
    str.Insert(i,buf[i]); //从0索引位插入buf数组中的字符.希望这短短几行代码对你有帮助.
      

  11.   

    #include <iostream.h>
    #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;
    }