将字符转换为整数会产生意外的值

时间:2014-04-04 13:19:11

标签: c#

我有以下代码:

var stringNumber = 93.ToString(CultureInfo.InvariantCulture);
var stringArray = stringNumber.ToCharArray();
var intArray = stringArray.Select(x => (int)x).ToArray();

我希望intArray包含的值是93,而是包含5751,而我不是肯定为什么?如何让intArray包含预期值?

8 个答案:

答案 0 :(得分:6)

因为默认情况下,将字符转换为整数会返回该字符的ASCII值。

您可以改为使用int.Parse()

var stringNumber = 93.ToString(CultureInfo.InvariantCulture);
var stringArray = stringNumber.ToCharArray();
var intArray = stringArray.Select(x => int.Parse(x)).ToArray();

答案 1 :(得分:3)

您可以使用Char.GetNumericValue之类的:

int[] intArray = 93.ToString()
                 .ToCharArray()
                 .Select(r=> (int) char.GetNumericValue(r))
                 .ToArray();

如果您的号码为int,您可以查看this answer获取int数组而不将其转换为字符串。

答案 2 :(得分:2)

您正在向其char投射numeric representation。请尝试使用int.Parse()

var stringNumber = 93.ToString(CultureInfo.InvariantCulture);
var stringArray = stringNumber.ToCharArray();
var intArray = stringArray.Select(x => int.Parse(x)).ToArray();

答案 3 :(得分:2)

你得到57而不是9,因为将一个char转换为int将获得char的十进制值

根据此编码http://www.fileformat.info/info/unicode/char/0039/index.htm

9为57 根据此编码,

3是51(相同)http://www.fileformat.info/info/unicode/char/0033/index.htm

要获取char的实际值,必须将该值解析为int int.Parse(x)

        var stringNumber = 93.ToString(CultureInfo.InvariantCulture);
        var stringArray = stringNumber.ToCharArray();
        var intArray = stringArray.Select(x => int.Parse(x)).ToArray();

答案 4 :(得分:1)

因为您将'9'字符转换为int 代码表示

stringArray.Select(x => int.Parse(x)).ToArray();

答案 5 :(得分:1)

var intArray = stringArray.Select(x => int.Parse(x)).ToArray();

答案 6 :(得分:1)

这是因为这是3和9的ASCII code

正确转换,您只是获取了char代码。尝试

int.Parse(x)

答案 7 :(得分:1)

试试这个:

const int offset = (int) '0';
var intArray = stringArray.Select(x => ((int) x) - offset).ToArray();

代码的问题是char值在内部表示为整数。但是,整数值是字符的代码,而不是转换为整数的字符的值。例如,根据ASCII character table,字符0的代码是整数48

上面的代码获取字符'0'的值,并从数组的字符值中减去它。这是有效的,因为ASCII数字是按顺序存储的 - 从09的数字从代码48传播到代码57。减去代码值为零,将基本上生成您想要的结果。这种方法的好处在于它不依赖于您使用的默认编码(虽然我不知道是否存在不遵守ASCII字符的编码'顺序),并且因为您不需要自己记住字符代码。