-1

我是处理文件的初学者。我想要在我的代码中做的是从用户那里得到一个名字,并将它隐藏在一个 .bmp 图片中。并且还能够从文件中再次获取名称。但我想先将字符更改为 ASCII 码(这就是我的作业所说的)

我试图做的是将名称的字符更改为 ASCII 代码,然后将它们添加到我将以二进制模式打开的 bmp 图片的末尾。添加它们后,我想从文件中读取它们并能够再次获取名称。

这是我到目前为止所做的。但我没有得到正确的结果。我得到的只是一些无意义的字符。这段代码是否正确?

int main()
{
    cout<<"Enter your name"<< endl; 
    char * Text= new char [20];
    cin>> Text;    // getting the name



    int size=0;
    int i=0;     
    while( Text[i] !='\0')          
    {

        size++;
        i++;

    }



int * BText= new int [size];

for(int i=0; i<size; i++)
{
    BText[i]= (int) Text[i];  // having the ASCII codes of the characters.

}


    fstream MyFile;
MyFile.open("Picture.bmp, ios::in | ios::binary |ios::app");  


    MyFile.seekg (0, ios::end);
ifstream::pos_type End = MyFile.tellg();    //End shows the end of the file before adding anything



    // adding each of the ASCII codes to the end of the file.
    int j=0;
while(j<size)
{
    MyFile.write(reinterpret_cast <const char *>(&BText[j]), sizeof BText[j]);
    j++;
}



MyFile.close();


char * Text2= new char[size*8];

MyFile.open("Picture.bmp, ios:: in , ios:: binary");


    // putting the pointer to the place where the main file ended and start reading from there.

    MyFile.seekg(End);
    MyFile.read(Text2,size*8);



cout<<Text2<<endl;


MyFile.close();

system("pause");
return 0;

}

4

3 回答 3

5

您的代码中存在许多缺陷,其中一个重要的缺陷是:

MyFile.open("Picture.bmp, ios::in | ios::binary |ios::app");

一定是

MyFile.open("Picture.bmp", ios::in | ios::binary |ios::app);
            ^           ^
            |           |
            +-----------+

 

其次,使用std::string而不是 C 风格的字符串:

char * Text= new char [20];

应该

std::string Text;

 

另外,用于std::vector制作数组:

int * BText= new int [size];

应该

std::vector<int> BText(size);

等等...

于 2013-04-03T12:19:02.230 回答
1

您写入int(32 位)但读取char(8 位)。

为什么不按原样写字符串?无需将其转换为整数数组。

而且,您不会终止您读入的数组。

于 2013-04-03T12:23:39.830 回答
0

您的写入操作不正确,您应该直接传递完整的文本 MyFile.write(reinterpret_cast <const char *>(BText), sizeof (*BText));

此外,将您的字符串转换为整数并返回字符会在您的字符之间插入空格,您在阅读操作中没有考虑到这些空格

于 2013-04-03T12:26:48.397 回答