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

C++ 将32位整数转换为可打印的8位字符,c++,visual-c++,C++,Visual C++,我想将一系列32位整数值转换为一系列可打印的8位字符值。将32位整数映射到可打印的8位字符值应生成清晰的ASCII艺术图像 我可以将整数转换为ASCII: #include <iostream> using namespace std; int main() { char ascii; int numeric; cout << "Enter Number "; cin >> numeric; cout <<

我想将一系列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;
}
在我的output.txt中也有这个


请告知您是否知道如何编写此程序。

首先,您无法将32位整数转换为8位ascii而不丢失信息。据我猜测,您应该从32位整数中提取4个ascii字符

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

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


如果要在不使用多个文件inout的情况下执行此操作

读取数组中的所有整数值,然后用字符指针指向起始内存位置,然后逐个写入此字符数组的内容

int* myIntArray; //keep the size of it somewhere
char* myCharArray =(char*)myIntArray; // size for myCharArray is 4 times of the myIntArray

将这些数字转换成十六进制后,您将得到以下结果

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

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

您的最小最坏赌注是读取每个整数,将其转换为一个字符数组并输出这4个字符


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

从技术上讲,将其称为ASCII值是不正确的。无法保证它运行的任何东西都使用ASCII。所以,基本上,你想重新实现
hd
,对吗?你怎么能区分两位数字和三位数字?我不知道他想做什么?他是否希望将
int
视为四个字符(或两个或六个,取决于平台)?如果是这样,移位和掩蔽应该可以工作,但他仍然必须定义字节在他的
int
中的组织方式:例如,高阶字节是第一个字符还是最后一个字符?但是,当然,如果这是目标,那么为什么要首先引入
int
int* myIntArray; //keep the size of it somewhere
char* myCharArray =(char*)myIntArray; // size for myCharArray is 4 times of the myIntArray
2d2d2d2b 207c0a2b 0a7c2020 2020207C
- - - +    | lf+  lf|            |