2012-11-19 39 views
0

我知道字符類型的前128個符號是ASCII symbols,我的意思是如果你打印它們,它們會被認爲是ASCII表格。那麼其他人呢?據我瞭解,其他128個符號沒有嚴格定義。如果我打印下面所有可能的char值,將取決於打印什麼?C++字符類型值由OS定義?

char a = 0; 
for (int i = 0; i < 256; i++) 
{ 
    if (i == 128) 
     cout << "------------------------------" <<endl; 
    cout << a++ <<endl; 
} 

我可以配置輸出嗎?

+2

「其他128個符號沒有嚴格定義」並且前128個也不是。(就術語而言,「char」是數字,而不是符號;符號可以以各種方式映射到數字;例如,ASCII定義了其中一個映射) –

+0

「我知道字符類型的前128個符號是ASCII符號」你知道只有當前平臺... – PlasmaHH

+0

[代碼頁](http:// en .wikipedia.org /維基/ Code_page) –

回答

3

char的前128個值不一定與ASCII字符對應。 char的值對應於執行字符集中的字符,該字符集是實現定義的集合。此字符集成員的值是特定於語言環境的(§2.3/ 3):

執行字符集的成員值和其他成員集的值是特定於語言環境的。

字符文字,如'a',具有類型char和值等於在執行字符集的字符值。同樣對於字符串文字。如果文字中的字符超出了實現定義的執行字符集,則它具有實現定義的值(§2.14.4/ 5):

如果沒有這種編碼,則通用字符 - 名稱被轉換爲實現定義的編碼。

在許多編譯器中,您可以配置執行字符集。例如,使用g++,可以使用-fexec-charset選項。

一旦你輸出了你的文本,它的解釋取決於它正在被查看的媒體,如終端。

1

由於終端解釋由std::cout所寫的字節,通常可以配置終端將字節顯示爲Latin-1,Latin-15,Cyrillic或其他任何您想要的內容。

在你的程序中,你不能配置它在顯示器上的顯示方式。你唯一能做的就是,你的代碼如何解釋這些字節。因此,爲了使用Latin-1,您的程序和終端必須將這些字節的含義設爲Latin-1。