将32位整数转换为可打印的8位字符

时间:2012-08-24 08:13:44

标签: c++ visual-c++

我想将一系列32位整数值转换为可打印的8位字符值序列。将32位整数映射到可打印的8位字符值应该会产生清晰的ASCII艺术图像。

我可以将Integer转换为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中也有这个。

如果您知道如何编写此程序,请告知。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

等等

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

你最不好的选择是在每个整数中读取它,将其转换为一个字符数组并输出这4个字符。

如果您正在使用unix,我建议使用'tee'将输出发送到2个文件,否则输出一次到stdout,然后再输出到你为Output.txt打开的任何文件句柄