2012-10-18 74 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

相关问题