C++ 打印ascii表0-127

C++ 打印ascii表0-127,c++,ascii,C++,Ascii,有一个关于打印ascii表中的前128个字符的问题。我还没走到这一步,因为我已经遇到了一个问题。以下代码打印从32-127开始的正确值。从0到31,但它会打印出一些废品值。我假设它也是正确的,因为我在asciitable.com上快速检查了一下,这些值代表了ABC…Z之外的其他值 因此,我的问题是如何像示例输出中那样打印这些值?我还想知道一个人应该如何编写一个程序,像示例输出那样打印出来。因为我能想到的解决方案会给我输出,例如一行1到10个字符,而不是一列 int main() { in

有一个关于打印ascii表中的前128个字符的问题。我还没走到这一步,因为我已经遇到了一个问题。以下代码打印从32-127开始的正确值。从0到31,但它会打印出一些废品值。我假设它也是正确的,因为我在asciitable.com上快速检查了一下,这些值代表了ABC…Z之外的其他值

因此,我的问题是如何像示例输出中那样打印这些值?我还想知道一个人应该如何编写一个程序,像示例输出那样打印出来。因为我能想到的解决方案会给我输出,例如一行1到10个字符,而不是一列

int main()
{
    int i =0;
    for(int rows = 0; rows < 16; rows++)
    {
        i = rows;
        while(i <= 127)
        {
            if(i <= 15)
                cout << hex << setw(2) << setfill('0') << i << "= " << setw(2) << setfill(' ') << toStr(i) << " | ";
            else
                cout << hex << setw(2) << setfill('0') << i << "= " << setw(2) << setfill(' ') << char(i) << " | ";
            i+=16;
        }

        cout << "\n";
    }

    return 0;
}
intmain()
{
int i=0;
对于(int行=0;行<16;行++)
{
i=行;

虽然(我检查gnu ascii程序。它做了类似的事情。

这些字符没有ascii标准化的图形表示,尽管有些字体/字符集确实提供了一个。例如,在旧的DOS系统(甚至我的旧的Zilog Z-80系统)上,你可以“戳”将这些值输入视频内存以查看相关字符。类似地,128-256有额外的图形用于绘制线、框、着色等。但是,只有那些您能够打印的图形才真正有ASCII字符的意义。如果您确实想显示更多,则必须使您的程序与它所使用的显示系统高度耦合s与之交互-找到一些特殊的转义序列,它支持显示非标准字符,通过图形API编写,或者回到去年的“插入内存”方法


要将输出拆分为列,可以在循环中添加一条额外语句,查看是否(i%num_columns==0),然后写一个换行符“\0”。如果希望列跳入值,请使用i+=16而不是i++,然后放入“if(i>0x70)”{i-=0x6F;std::cout有些字符不是要显示的;例如,如果我没记错的话,第七个字符是“铃声”,它会发出嘟嘟声(因为打字机,你知道,当你写完行后,它会发出嘟嘟声)


我所知道的最好的可移植方法是设置一个条件,不打印0到31之间的字符,或者在表中存储这些字符的经典名称(BR、LF等,您可以在web上轻松找到它们)并显示这些字符,而不是试图显示字符本身,因为根据定义,这些字符是不可显示的。

32之前的字符是控制字符。例如,ascii 7是“bell”字符,13是换行符等等。因此,您必须了解如何打印它们


至于按列而不是按行打印,这里有一个提示:请注意,第一行包含ascii字符0、10、20、…70;第二行包含1、11、…71。您应该能够找出模式,并注意需要两个循环(外部和内部)其中,内部循环打印属于外部循环给定行的字符。

如果字符小于32,则它是一个特殊字符,因此可能没有可Vuable标志符。因此,如果字符小于32,则应考虑这一点,并在其位置放置适当的字符串

#include <iostream>

// An array of strings for all the special characters.
char const* data[] = {"", "", "", "", "", "", "", ""
                      "\\a","\\b","\\t","\\n","\\v","\\f","\\r"
                      // etc
                     };

char const* toStr(int loop)
{
    // Used by normal character.
    // Note buffer[0] is where we put the char. buffer[1] is always '\0'
    static char buffer[] = " ";

    if (loop < 32)
    {
        return data[loop];
    }
    else
    {
        buffer[0] = loop;
        return buffer;
    }
}

int main()
{
    for(int loop =0;loop < 128;++loop)
    {
        std::cout << loop << "=" << toStr(loop) << "\n";
    }
}
#包括
//所有特殊字符的字符串数组。
字符常量*数据[]={“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、
“\\a”、“\\b”、“\\t”、“\\n”、“\\v”、“\\f”、“\\r”
//等
};
字符常量*toStr(整数循环)
{
//由普通字符使用。
//注意:缓冲区[0]是我们放置字符的地方。缓冲区[1]始终是“\0”
静态字符缓冲区[]=“”;
if(循环<32)
{
返回数据[循环];
}
其他的
{
缓冲区[0]=循环;
返回缓冲区;
}
}
int main()
{
for(int循环=0;循环<128;++loop)
{

std::不想共享链接吗?或者是这一个我恐怕也找不到它…一定隐藏在某个地方。我想你的意思是“不可打印”字符。我不明白打印第一列后如何跳回开始。或者我应该按行打印所有内容,例如在第一次运行时打印00、10、20…70?我已经升级了ted我的代码。我没有详细说明是有原因的,我猜你是这么想的:)
#include <iostream>

// An array of strings for all the special characters.
char const* data[] = {"", "", "", "", "", "", "", ""
                      "\\a","\\b","\\t","\\n","\\v","\\f","\\r"
                      // etc
                     };

char const* toStr(int loop)
{
    // Used by normal character.
    // Note buffer[0] is where we put the char. buffer[1] is always '\0'
    static char buffer[] = " ";

    if (loop < 32)
    {
        return data[loop];
    }
    else
    {
        buffer[0] = loop;
        return buffer;
    }
}

int main()
{
    for(int loop =0;loop < 128;++loop)
    {
        std::cout << loop << "=" << toStr(loop) << "\n";
    }
}