int到char数组

时间:2016-07-28 09:11:01

标签: c#

static void Main(string[] args)
{
    int num = 382;
    int output = 0;
    char[] nlst = num.ToString().ToCharArray();
    for (int i = 0; i < nlst.Length; i++)
    {
        output += nlst[i];
    }
    Console.WriteLine(output);
    Console.ReadLine();
}

输出结果是157,实际上它应该是13.Wed Dedbugging我发现char []的3个元素是这样的:

  

[0] 51'3',[1] 56'8',[2] 50'2'

为什么呢? 51,56,50是什么意思?

7 个答案:

答案 0 :(得分:9)

你假设'0'的char值是0。它不是;事实上,'0'的UTF16值为48。

因此,您要将字符'3''8''2'的UTF16值加在一起,即51,56和50。

请注意,如果您的目标是将整数的所有数字加在一起,最好的方法是避免完全转换为字符串,如下所示:

int num = 382;

// Compute the sum of digits of num

int total = 0;

while (num > 0)
{
    total += num%10;
    num /= 10;
}

Console.WriteLine(total);

但是,如果您只是想知道如何使您的版本正常工作,只需在每个字符中减去'0',然后再将代码添加到一起。这会将'0'转换为0,'1'转换为1,等等:

for (int i = 0; i < nlst.Length; i++)
{
    output += nlst[i] - '0'; // Subtract '0' here.
}

答案 1 :(得分:1)

分别是'3','8'和'2'的Unicode值。

要将Unicode值(例如51)转换为Unicode值(例如3)所代表的字符的整数表示,请使用Convert.ToInt32(char)方法。

答案 2 :(得分:0)

[EDITED] Char是unicode 16(GoogleAnalytics.make)。你可以使用int.Parse

static void Main(string[] args)
{
    int num = 382;
    int output = 0;
    char[] nlst = num.ToString().ToCharArray();
    for (int i = 0; i < nlst.Length; i++)
    {
        output += int.Parse(nlst[i].ToString());

    }
    Console.WriteLine(output);
    Console.ReadLine();
}

答案 3 :(得分:0)

这些数字是数字的字符代码。如果您只想将每个数字的值相加,可以从每个字符值中减去48以将其变为ist数值

for (int i = 0; i < nlst.Length; i++)
{
    output += nlst[i] - 48;
}

答案 4 :(得分:0)

您的输出变量定义为整数。如果将一个char添加(+ =)一个整数,它的unicode值将被添加到输出变量中。

    static void Main(string[] args)
{
    int num = 382;
    int output = 0;
    char[] nlst = num.ToString().ToCharArray();
    for (int i = 0; i < nlst.Length; i++)
    {
        output += Convert.ToInt32(nlst[i]);

    }
    Console.WriteLine(output);
    Console.ReadLine();
}

答案 5 :(得分:0)

您需要将output += Convert.ToInt32(Char.GetNumericValue(nlst[i])); 转换回其数值。

试试这个:

WordCount.scala

答案 6 :(得分:0)

正确的解决方案是

output += Convert.ToInt32(nlst[i]) - '0';

或简要

output += nlst[i] - '0';

或作为替代

output += Convert.ToInt32(Convert.ToString(nlst[i]));

请注意:与C ++一样,C#Convert.ToInt32将字符转换为基本的Unicode(即旧的Ascii)。