gpt4 book ai didi

c# - C 和 C# 的 ANSI 字符处理

转载 作者:行者123 更新时间:2023-11-30 17:23:03 25 4
gpt4 key购买 nike

我有一个字符“¿”。如果我在 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

最佳答案

这就是有符号/无符号数字的表示和转换方式。

在您的情况下,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 :

Type: char
Range: U+0000 to U+FFFF

因此 191 总是会按照您的预期转换为 int

关于c# - C 和 C# 的 ANSI 字符处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27760084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com