在C#中获取字符的ascii值

时间:2014-07-14 22:36:41

标签: java c# asp.net razor

我习惯于在java中编码,但最近我一直在制作一些使用C#的ASP网页。

在Java中,字符默认由其数字ascii值表示,除非您使用字符串。我无法在C#中重复这一点。

在C#中获取字符的ascii值需要做什么?

2 个答案:

答案 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)

.Net中的

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的定义范围。