C和C#的ANSI字符处理

时间:2015-01-03 22:13:29

标签: c# c casting character-encoding

我有一个角色'¿'。如果我在C中使用整数转换它,结果是-61并且在C#中使用相同的转换,结果是191.有人可以解释我原因。

C Code
char c = '¿';
int I = (int)c;
Result I = -62


C# Code
char c = '¿';
int I = (int)c;
Result I = 191

1 个答案:

答案 0 :(得分:0)

这是表示和转换singed / unsigned数字的方式。

看起来C编译器的默认值在你的情况下使用signed byte作为char的基础类型(因为你要注意明确指定unsigend char编译器的默认值是使用,见 - Why is 'char' signed by default in C++?)。

因此有符号字节191(0xBF)表示负数(最高有效位为1) - -65

如果您使用unsigned char值,则会保持正面效果。

如果您的编译器为char(即short)提供了更广泛的类型,则无论char是否已签名,191都将保持为正191。

在C#中始终未签名 - 请参阅MSDN char

  

类型:char
   范围:U + 0000到U + FFFF

因此,191总会按预期转换为int