ToCharArray生成两组数字而不是一组

4

嗨,我正在尝试将一个字符串拆分为字符数组,但由于某种原因,结果不是我期望的。我通过调试器传递了这段代码,并给它了字符串"34325"。当我到达将字符串转换为字符数组的代码部分时,出现了两组字符的情况。我得到了类似这样的结果:

char[0] = 51 '3' char[1] = 52 '4' char[2] = 51 '3' char[3] = 50 '2' char[4] = 53 '5'

然后,当我将char数组的每个元素转换为int时,第一个数字总是被取出:51,52,51,50,53。

我的问题是如何纠正这个问题,以便我获得3、4、3、2、5?另外,当我使用toCharArray()方法时,这些数字从哪里来的:51,52,51,50,53?

这是我的代码:

    value = TextBox1.Text;

    char[] numberChars = value.ToCharArray();
    int[] numbers = numberChars.Select(x => Convert.ToInt32(x)).ToArray();

    for( int i = 0; i < numbers.Length; i++ ) {
        TextBox2.Text += numbers[i] + " ";
    }
2个回答

2

如果我正确理解了您的问题,您希望将字符串拆分为表示数字的整数,如下所示:"34325" 变成 new int[] {3,4,3,2,5}

请按照以下方式更改您的代码,将表示数字的每个字符解释为单个数字:

 int[] numbers = numberChars.Select(x => ((int)x)-'0').ToArray();

这里有一个在ideone上的演示链接

你看到数字5152等是因为你看到了相应数字的ASCII码。


好的,我测试过了,它可以工作,但是我不理解这个表达式 ((int)x) - '0'。我知道 (int)x 将元素转换为整数,但是 - '0' 是什么意思呢? - Nistor Alexandru
2
由于 ASCII 中的字符 '0' 对应数字 48,通过将数字减去字符 '0' 的 ASCII 值,可以得到该数字所代表的数值而非 ASCII 值。 - Tyler Lee
2
常量'0'代表数字零的ASCII编码。由于所有十进制数字在ASCII和UNICODE中都占据连续的位置,因此从另一个表示数字的字符的代码中减去零的代码可以给出该数字到零的距离,这也是该数字的整数值。 - Sergey Kalinichenko

2
你得到的“其他”序列是ASCII值的序列...
请查看int.Parse(string)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接