C# int到char数组 static void Main(字符串[]args) { int num=382; int输出=0; char[]nlst=num.ToString().tocharray(); for(int i=0;i

C# int到char数组 static void Main(字符串[]args) { int num=382; int输出=0; char[]nlst=num.ToString().tocharray(); for(int i=0;i,c#,C#,输出结果是157,实际上应该是13。通过Dedbugging,我发现char[]nlst的3个元素如下: [0]51'3',[1]56'8',[2]50'2' 为什么??51,56,50是什么意思?您假设'0'的char值为0。事实并非如此;实际上,'0'的UTF16值是48 因此,将字符'3'、'8'和'2'的UTF16值相加,即51、56和50 请注意,如果您的目标是将整数的所有数字相加,最好的方法是避免完全转换为字符串,如下所示: static void Main(string[] arg

输出结果是157,实际上应该是13。通过Dedbugging,我发现char[]nlst的3个元素如下:

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


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

您假设
'0'
的char值为0。事实并非如此;实际上,
'0'
的UTF16值是48

因此,将字符
'3'
'8'
'2'
的UTF16值相加,即51、56和50

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

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();
}
但是,如果您只是想知道如何使您的版本工作,只需在将代码添加到一起之前从每个字符中减去
'0'
。将
'0'
转换为0,
'1'
转换为1,等等:

int num = 382;

// Compute the sum of digits of num

int total = 0;

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

Console.WriteLine(total);
for(int i=0;i
这些分别是“3”、“8”和“2”的Unicode值

要将Unicode值(如51)转换为Unicode值(如3)表示的字符的整数表示形式,请使用以下方法。

[已编辑] Char是unicode 16()。您可以使用int.Parse

for (int i = 0; i < nlst.Length; i++)
{
    output += nlst[i] - '0'; // Subtract '0' here.
}
static void Main(字符串[]args)
{
int num=382;
int输出=0;
char[]nlst=num.ToString().tocharray();
for(int i=0;i
这些数字是数字的字符代码。如果您只想将每个数字的值相加,可以从每个字符值中减去48,将其转换为ist数字值

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();
}
for(int i=0;i
您的输出变量定义为整数。如果将(+=)字符添加到整数中,则其unicode值将添加到输出变量中

for (int i = 0; i < nlst.Length; i++)
{
    output += nlst[i] - 48;
}
static void Main(字符串[]args)
{
int num=382;
int输出=0;
char[]nlst=num.ToString().tocharray();
for(int i=0;i
您需要将
字符
转换回其数值

试试这个:

    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();
}

正确的解决办法是

output += Convert.ToInt32(Char.GetNumericValue(nlst[i]));
或者短暂地

output += Convert.ToInt32(nlst[i]) - '0';
或者,作为替代方案

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

<>请注意:以及C++、C→转换。ToT32将字符转换为基本的Unicode(即,好的ASCII)。你到底想实现什么?51,56,50是3,8,2的asci代码。您将字符串拆分为单独的字符。@BWA,ASCII是上个千年…@FrédéricHamidi是的,但仍然有效;-)基本unicode代码映射到asci;-)
output += Convert.ToInt32(Convert.ToString(nlst[i]));