我现在有一个数组BYTE *tmp = new BYTE[100],
 然后我在这个数组里存储了100个数据,我现在想把这100个
BYTE型的数据保存到一个文本文档中,结果写入文件以后显示是乱码,
请问该怎么转换才能让文件中显示是十进制整数呢?

解决方案 »

  1.   

    BYTE *tmp = new BYTE[100] 改为BYTE *tmp = new BYTE[101],
      

  2.   

    你要对每个数据作转换
    比如
    CString str;
    str.Format("%d", tmp[0]);
    然后将这个字符串写入文件
    但是如果这么处理
    你读取的时候还要转回来
      

  3.   

    当然要转成字符写进去了,你是怎么写的,如BYTE是100,而不是字符串“100”,写进出当然显示不出来了
      

  4.   

    想写成文本,要用printf族的函数转换成字符串再写。
      

  5.   


    BYTE类型的数据应该是二进制,怎么会是100呢?,肯定也不会是“100”,
    用ultraedit打开文件显示十六进制是正确的。
      

  6.   

    你显示的乱码应该是字符类型所致,写入文件的时候强制类型转换就是了。如下面程序段中的m_pSrcImageData本来为字符类型,如果不强制转换就会显示乱码。
    //将图像像素数据写入一个文本文件中
    fstream file("原始载体像素值.txt",ios::in|ios::out);
    file<<"原始载体像素值为:"<<'\n';
    for (j = 0; j < m_nSrcImageHeight; j++)
    {
    for (i =0; i < m_nSrcImageWidth; i++)
    {
    file << (int)m_pSrcImageData[j*m_nSrcImageWidth+i]<<'\t';
    }
    file << endl;
    }
    file.close();
      

  7.   


    看来楼主还没理解四楼的意思!既然你明白 BYTE 类型是二进制内容,那写到文件里当然就是二进制数据啦,试问二进制数据怎么可能显示出10进制数呢?首先得把它转换成字符型数据,再写入!
    但是你要再理解一点,虽然你申请了100个BYTE数据,而BYTE只占一个字节,但是当你转换成字符数据后,写入的文本就不止100个字节了!
      

  8.   

    既然用了BYTE 却又要存明文进去,然后每个都转成字符再保存...这不麻烦吗....你要存明文就用string
    存16进制就用BYTE....
      

  9.   

    不能直接写到记事本的  需要转换下 ,声明个CString 变量CString str;
    str.Format("%d", tmp[0]);
    然后将这个字符串写入文件
    但是如果这么处理
    你读取的时候还要转回来
      

  10.   


    void CMFCtestDlg::OnButton3() 
    {
    // TODO: Add your control notification handler code here
    BYTE bData[100];
    int i = 0;
    for (i=0;i<100;i++)
    {
    bData[i] = i;
    }
    char bFile[100*5+1];
    for (i=0;i<100;i++)
    {
    sprintf(&bFile[i*5],"0x%02x,",bData[i]);
    }
    CFile file;
    file.Open("test.txt",CFile::modeReadWrite|CFile::modeCreate);
    file.Write(bFile,500);
    file.Close();
    }
    楼主,试试这个代码,把十六进制一个一个转成ASCII码放到文件里的,可以生成一个 test.txt 文件,打开可以看到内容的.
      

  11.   

    谢谢,你的代码好用。令请问,我要想把BYTE数组里的数都转成int型该怎么写呢?谢谢了。
      

  12.   

    int i = tmp[9];
    就像这样
      

  13.   

    回16楼,你想把 char 型转成 int 型,意思是 1个 char 放到 1个 int 中,还是 4个 char 放到 1个 int 中?因为 char 是1字节,而 int 在我们的 VC6 编译器中是 4字节.如果1个放1个,就像 17楼那样可以了.如果4个char挤进一个int里,就要这样.
    char bByte[4] = {1,2,3,4};
    int a = bByte[0] | (bByte[1]<<8) | (bByte[2]<<16) | (bByte[3]<<24);
    又或者
    int a = *( (int*)&bByte[0] ) ;结果都是 a = 0x04030201
      

  14.   


    BYTE bData[100] = {0};
        int i = 0;
        for (i=0;i<100;i++)
        {
            bData[i] = i;
        }
        char szBuf[512] = {0};
    char szTmp[10] = {0};
        for (i=0;i<100;i++)
        {
            sprintf(szTmp, "%d ", bData[i]);
    strcat(szBuf, szTmp);
        } try
    {
    CFile file;
    file.Open("F:\\11.txt",CFile::modeReadWrite|CFile::modeCreate);
    file.Write(szBuf,strlen(szBuf));
    file.Close(); 
    }
    catch (CFileException* e)
    {
    e->ReportError();
    e->Delete();
    }
      

  15.   

    BYTE *pByte = new BYTE[100];
     
    int i= 0;
    while (i != 100)
    {
    pByte[i] = 2*i+1;
    i++;
    }FILE *pf = fopen("c:\\t.txt","a+");i= 0;
    while (i != 100)
    {
    fprintf(pf,"%d ",pByte[i]);
    i++;
    }
    fclose(pf);
    delete []pByte;
      

  16.   

    大家都很热心,很感谢。问这个问题是因为我现在要保存一幅图像的灰度值,保存为一个二维矩阵,灰度值我是用BYTE表示的,保存成矩阵后要写入到文件中,所以要转换成string类型。然后还要对矩阵数据进行处理,所以又要把BYTE转换成int型。我不知道能不能在保存像素灰度值的时候就直接保存为int型呢?
      

  17.   

    BYTE和int没有什么本质区别
    BYTE就是0-255
    int范围大些罢了
      

  18.   

    保存成什么都没关系,主要是你知道数据是如何放的,到时就如何取出来.
    4个byte放一个int,还是1个byte放一个int.都可以.
    放的方法与取的方法配合.最后取得你要的数据.
      

  19.   

    我上面的那个程序段就可以保存灰度图像数据,没有转换成CString类型,保存后也可以对图像数据进行处理,我前几天就是这样处理的,可以的。