如何在不丢失c#中的数字值的情况下将int数字转换为char

时间:2013-08-31 19:39:51

标签: c# type-conversion

Mabby这是一个愚蠢的问题,但我如何将int类型的数字转换为char类型的数字?

标准转换OP不会这样做:

int x = 5;
char myChar = Convert.ToChar(5); // myChar is now a unicode character
char secondChar = (char)x; // again I get a unicode character, not a digit '5'

我需要这个,因为我有一个返回IEnumerable Char的方法,我需要以某种方式返回ints的集合。

例如:

int[] {1, 2, 3}  

转换为

char[] {'1', '2', '3'}  

是否可以在C#中进行这样的转换?

4 个答案:

答案 0 :(得分:5)

在转换为48之前,将int添加到char值:

char c = (char)(i + 48);

int[] - > char[]转化:

var source = new int[] { 1, 2, 3 };
var results = source.Select(i => (char)(i + 48)).ToArray();

它有效,因为ASCII table中的'0'字符值为48。但只有当int值介于09之间时,它才有效。

答案 1 :(得分:0)

var yourInts = new int[]{1,2,3};
var result = yourInts.Select(x=>x.ToString()[0]).ToArray();

答案 2 :(得分:0)

如果您确定该值在0 .. 9范围内(包括两者),则可以使用按位或代替加法来稍微提高效率:

(char) ('0' | i);

这是可行的,因为'0'具有二进制代码点0011 0000,十位数字都在0011 00000011 1001之间。

您可以使用以下方法将IEnumerable<int>转换为IEnumerable<char>

data.Select(i => (char) ('0' | i));

答案 3 :(得分:0)

这应该有效: (char) (i + '0')

示例: 变量 i = 8; var c = (char) (i + '0');//给出'8'