如何在c / c ++中打印上标2?

时间:2011-02-14 06:04:05

标签: c++

我正在尝试在以下代码中打印方形标记:

代码1:

char* exp = new char[300];  
*(exp) = 178// which is 2's extended ascii code  
*(exp+1) = '\0'// end of string  
printf("%s",exp);`

会打印“?”


似乎小2将自动加入下一个字母:

代码2:

char* exp = new char[300];  
*(exp) = 178// which is 2's extended ascii code  
*(exp+1) = '4'// or anything '5' 'a' '#'...  
*(exp+2) = '\0'// end of string  
printf("%s",exp);

它会打印一个中文单词,或者可能不是,但非常喜欢。


该怎么办?我只想打印“小2”。

PS:

在WindowsXP控制台中,非常感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

以下是打印上标2的三种不同方法:

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(int argc, char** argv)
{
    setlocale(LC_CTYPE, "");

    wchar_t *foo = L"²";
    wprintf(L"%ls\n", foo);

    wprintf(L"²\n");

    wchar_t bar[2];
    bar[0] = 178;
    bar[1] = 0;
    wprintf(L"%ls\n", bar);

    return 0;
}

答案 1 :(得分:1)

178在ASCII表中不是小二,它是一个块。难道不是更喜欢253吗?

此外,数字如何转换为字符取决于您使用的平台。但你对此一无所知。

答案 2 :(得分:1)

ASCII字符集仅涵盖英文字母,数字和一堆其他字符,但没有像方形符号,钻石或俱乐部之类的东西。这些字符超出了ASCII规范,并且取决于读取输出的人将采用哪种编码。所有非英文字符(例如中文,日文,俄文,北欧口音字母,希伯来文......)都不在ASCII规范范围内。

当计算机产生一些输出时,您可以放心地假设如果您只坚持使用ASCII子集,那么您的字节将是明确的(有时候使用不同的编码很常见,即使只是英文字母,但现在这些时代大多都没了)。但是,如果输出包含任何高于127的字节,则解释取决于读者将考虑哪种编码。

非常常见的编码是例如Latin-1(ISO8859-1),其中平方符号是代码178,CP850(DOS),其中平方符号是253或UTF-8,其中平方符号是序列194+ 178。

鉴于您的终端正在显示中文字符,我猜可能它将您的输出解释为UTF-8,因为它是一个编码,每个字符使用可变数量的字节,但是它能够表示任何unicode字符; iso-8859-1和cp850都不能代表汉字。

然而,这只是猜测,因为还有其他非常常见的编码,例如日文字符......(Shift-JIS)