-1

一連の32ビット整数値を一連の印刷可能な8ビット文字値に変換したいと思います。32ビット整数を印刷可能な8ビット文字値にマッピングすると、クリアなASCIIアートイメージが得られます。

整数をASCIIに変換できます:

#include <iostream>
using namespace std;
int main() {
    char ascii;
    int numeric;
    cout << "Enter Number ";
    cin >> numeric;
    cout << "The ascii value of " << numeric << " is  " << (char) numeric<<"\n\n"<<endl;
    return 0;
}

また、番号が保存されているテキストファイルを開く必要があります。

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
    string line;
    ifstream myfile ("1.txt");
    if (myfile.is_open())
    {
        while ( myfile.good() )
        {
            getline (myfile,line);
            cout << line << endl;
        }
        myfile.close();
    }
    else
        cout << "Unable to open file"; 
    return 0;
}

しかし、私の問題は、この「テキスト」ファイルを開いて画面にASCIIを印刷できず、そのコピーを「Output.txt」に印刷できないことです。

私のテキストファイルの中にはただ:

757935403 544999979 175906848 538976380 757795452 170601773 170601727

ASCIIに変換した後は、次のようになります。

ASCIIアート画像を表します

+---+
|   |
|   |
+---+

これも私のoutput.txtにあります。

このプログラムの書き方を知っているかどうか教えてください。

4

2 に答える 2

1

まず、情報を失うことなく 32 ビット整数を 8 ビット ascii に変換することはできません。私の推測では、32 ビット整数から 4 つの ascii 文字を抽出する必要があります。

入力ファイルが非バイナリである場合 (つまり、整数値が人間が判読できるか、区切り文字で区切られていることを意味します)、最初にすべきことは、別のファイル/ストリームを作成し、これらの値を新しいファイル/ストリームに書き込むことですが、バイナリ モードになっています。 (このモードでは、区切り文字はなく、結果のファイル/ストリームは人間が判読できません)。

この新しいファイル/ストリームから文字を 1 つずつ読み取り (バイナリ モードでファイルを開きます)、非バイナリ モードを使用して最終出力ファイルに書き込みます。


複数のファイル入出力なしで実行したい場合は、

配列内のすべての整数値を読み取り、最初のメモリ位置を char ポインターでポイントしてから、この char 配列の内容を 1 つずつ書き込みます。

int* myIntArray; //keep the size of it somewhere
char* myCharArray =(char*)myIntArray; // size for myCharArray is 4 times of the myIntArray
于 2012-08-24T08:48:45.907 に答える
0

これらの数値を 16 進数に変換すると、次のようになります。

2d2d2d2b 207c0a2b 0a7c2020 2020207C
- - - +    | lf+  lf|            | 

などなど

したがって、基本的に何らかの理由で、入力ファイルには出力する文字が整数として格納されています。これは完全にエンディアンでは安全ではありません。

各整数を読み取り、それを文字の配列にキャストして、それらの4文字を出力することは、あなたの最悪の賭けです。

Unix を使用している場合は、'tee' を使用して出力を 2 つのファイルに送信することをお勧めします。

于 2012-08-24T09:11:25.627 に答える