我习惯于在java中编码,但最近我一直在制作一些使用C#的ASP网页。
在Java中,字符默认由其数字ascii值表示,除非您使用字符串。我无法在C#中重复这一点。
在C#中获取字符的ascii值需要做什么?
答案 0 :(得分:0)
ASCII是非常小的字符子集,可以用C#/ Java表示。
获取ASCII码的最快方法(假设知道该值适合ASCII范围):
var ascii = ((int)c) & 0x7F;
如果值超出范围,您可能需要添加范围检查(0-0x7F)并失败。或者,您可以使用Encoding.ASCII
进行转换(将使用问号替换范围之外的字符)。
注意:如果你的" ascii"实际上意味着"数值" / UTF-16 Unicode代码比基本强制转换为ushort
(或int
)将起作用:
var code = (int)c;
答案 1 :(得分:0)
char是一个2字节结构,表示unicode code point的UTF-16编码 - 其中ASCII是一个很小的子集。但是一些包含某些汉字字符的unicode代码点需要两个以上的字节,并且它们在.Net字符串中表示为surrogate pair。因此,获取指定索引处字符串中字符的unicode代码点值的最常用方法是Char.ConvertToUtf32(string s, int index)
例如,以下列举了字符串中的unicode代码点值:
public static IEnumerable<int> Utf32CodePoints(string s, int index)
{
for (int length = s.Length; index < length; index++)
{
yield return char.ConvertToUtf32(s, index);
if (char.IsSurrogatePair(s, index))
index++;
}
}
如果您明确只需要ASCII值并希望跳过非ASCII字符,则可以使用ASCII解码器和相应的例外情况,如下所示:Encoding.ASCII Property。或者,只需将每个char转换为int并检查其值是否介于U + 0000和U + 007F之间,这是ASCII的定义范围。