C# int到char数组 static void Main(字符串[]args) { int num=382; int输出=0; char[]nlst=num.ToString().tocharray(); for(int i=0;i
输出结果是157,实际上应该是13。通过Dedbugging,我发现char[]nlst的3个元素如下: [0]51'3',[1]56'8',[2]50'2'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
为什么??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]));