C#中如何将int转换为字符字面量而非Unicode表示?
如何把整数3转换成字符'3'而不是Unicode控制字符?
你遇到的问题其实是对字符编码的误解啦——直接把int的3转char,得到的是Unicode编码为3的控制字符(也就是\u0003,对应End of Text控制符),而字符'3'本身的Unicode编码是十进制的51(十六进制0x33),这俩完全不是一回事。
给你几个简单的解决方法:
方法一:利用字符编码的连续性(推荐,效率最高)
字符'0'到'9'的Unicode/ASCII编码是连续的,从48('0')一直到57('9')。所以只要给你的整数加上'0'的编码值,就能得到对应的数字字符:int i1 = 3; char c1 = (char)(i1 + '0'); Console.WriteLine(c1); // 输出 '3'这个方法只适用于0-9的整数,如果你要转换的整数是这个范围,用它准没错。
方法二:通过字符串中转
先把整数转成字符串,再取第一个字符(适合单数字整数):int i1 = 3; char c1 = i1.ToString()[0]; Console.WriteLine(c1); // 输出 '3'要是你的整数是多位数(比如123),这个方法会取字符串的第一个字符'1',所以用的时候要注意场景。
方法三:直接指定Unicode编码
如果你记得数字字符的编码,也可以直接计算:int i1 = 3; char c1 = (char)(48 + i1); // 48是'0'的编码 Console.WriteLine(c1);本质和方法一一样,只是把'0'换成了它的十进制编码值而已。
内容的提问来源于stack exchange,提问作者Birdman
相关产品推荐
相关产品推荐

