-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 字符。

如果您的输入文件是非二进制的(这意味着整数值是人类可读的/由一些分隔符分隔),您应该做的第一件事是创建另一个文件/流并将这些值写入新文件/流,但现在处于二进制模式(在这种模式下,将没有分隔符,并且生成的文件/流将不可读)。

现在从这个新文件/流中逐个读取字符(以二进制模式打开文件),并使用非二进制模式将其写入最终输出文件。


如果您想在没有几个文件输入的情况下这样做,

读取数组中的所有整数值,然后用 char 指针指向起始内存位置,然后一一写入此 char 数组的内容。

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

将这些数字转换为十六进制后,您会得到这个

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

等等等等

所以基本上由于某种原因,输入文件包含存储为整数的输出字符。这完全是字节序不安全的。

你最糟糕的赌注是读取每个整数,将其转换为一个字符数组并输出这 4 个字符。

如果您使用的是 unix,我建议您尽可能使用“tee”将输出发送到 2 个文件,否则输出一次到 stdout,然后再次输出到您为 Output.txt 打开的任何文件句柄。

于 2012-08-24T09:11:25.627 回答