2012-10-18 73 views
2

我很難理解如何在ascii表中表示多字節字符:十進制格式,然後是十六進制。多字節字符表示ASCII和十六進制

例如:

char *c = "é"; 
printf("%d\n%d", c[0], c[1]); 

它將顯示:

-61 

-87 

在ASCII表中, 「E」 在十進制是130和82進制。 我明白82是130的十六進制值,但是我們如何從-61 & -87獲得130?

預先感謝和對不起,我的拼寫

+0

當你把你的字符作爲'unsigned int's並使用'ud'作爲'printf'修飾符時會發生什麼?還要注意'c [1]'顯然會顯示你的''\ 0'' –

+0

錯誤:從指針轉換爲整數。 「é」必須在char *中,不能包含在char中,因此我想是int。 – inScienta

回答

3

根據UTF-8字符集(使用,除其他外,由許多GNU/Linux發行),'é'字符常數的值是0xC3A9,這相當於11000011 10010101在二進制。這裏我們可以理解結果,假設有兩個補充表示。

  • 該序列11000011等於-61十進制。
  • 序列10010101等於-87十進制。
+0

這是一個真正的答案。我假設Windows不使用這種編碼? –

+1

我認爲Windows主要使用Windows-1252編碼。 – md5

+0

謝謝!現在我只需要了解負二進制值轉換。只是要知道,爲什麼在ASCII表中它的十進制值是130? – inScienta

相關問題