簡體   English   中英

負ASCII值

[英]Negative ASCII value

負ASCII值有什么意義?

int a = '«'; //a = -85 but as in ASCII table '<<' should be 174

沒有負的ASCII值。 ASCII包括128個字符的定義。 他們的指數都是正數(或零!)。

您看到此負值,因為該字符來自擴展的ASCII集,並且太大而無法放入char字面值。 因此,該值溢出到您的char (在您的系統上簽名,顯然)定義為負面。

解決方法是直接寫入值:

unsigned char a = 0xAE; // «

我用常規的十六進制表示法編寫它,因為我認為它看起來比174更漂亮。 :)

這是編譯器的char類型是有符號整數類型的假象, int是更寬的有符號整數類型,因此字符常量被認為是負數,並且符號擴展為更寬的整數類型。

它沒有多大意義,只是發生了。 C標准允許編譯器實現選擇是否將char視為有符號或無符號。 有些編譯器甚至有編譯時間開關來改變默認值。 如果要確保char類型的unsigned char ,請分別顯式寫入signed charunsigned char

使用unsigned char擴展為int以避免負的int值,或者打開一個全新的Pandora的盒子並享受wchar

哪有這回事。 ASCII是一個字符表,每個字符在表中都有一個索引或一個位置。 沒有“負面”指數。

但是,有些編譯器認為char是一個帶符號的整數數據類型,這可能是造成混淆的原因。

如果將其打印為unsigned int ,則會將相同的位解釋為無符號(正)值。

ASCII范圍0..127,ANSI(也稱為“擴展ASCII”)范圍為0..255。

ANSI范圍不適合簽名字符(大多數編譯器中字符的默認類型)。

大多數編譯器都有像'char'類型是無符號(GCC)的選項。

我有這個神器。 當您使用char作為符號時,您沒有問題。 但是當你將它用作整數(使用isalpha()等)並且ASCII代碼大於127時,則'char'解釋為'signed char'並且isalpha()返回異常。 當我需要使用'char'作為整數時,我將'char'轉換為unsigned:

  • isalpha((unsigned char)my_char);

@ n0rd:koi8代碼頁使用128到255的ascii和其他國家代碼頁: http//www.asciitable.com/

在字符表示中,您分配了8位(1個字節)。 除此之外,第一位用於表示符號。 在無符號字符的情況下,它使用全8位來表示允許0到255的數字,其中128-255被稱為擴展ASCII。 由於我所描述的內存中的表示,我們有-1具有與255相同的值, char(-2)==char(254)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM