我想将一系列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中也有这个。
如果您知道如何编写此程序,请告知。
答案 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打开的任何文件句柄