我有以下代码:
var stringNumber = 93.ToString(CultureInfo.InvariantCulture);
var stringArray = stringNumber.ToCharArray();
var intArray = stringArray.Select(x => (int)x).ToArray();
我希望intArray
包含的值是9
和3
,而是包含57
和51
,而我不是肯定为什么?如何让intArray
包含预期值?
答案 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)
答案 7 :(得分:1)
试试这个:
const int offset = (int) '0';
var intArray = stringArray.Select(x => ((int) x) - offset).ToArray();
代码的问题是char
值在内部表示为整数。但是,整数值是字符的代码,而不是转换为整数的字符的值。例如,根据ASCII character table,字符0
的代码是整数48
。
上面的代码获取字符'0'
的值,并从数组的字符值中减去它。这是有效的,因为ASCII数字是按顺序存储的 - 从0
到9
的数字从代码48
传播到代码57
。减去代码值为零,将基本上生成您想要的结果。这种方法的好处在于它不依赖于您使用的默认编码(虽然我不知道是否存在不遵守ASCII字符的编码'顺序),并且因为您不需要自己记住字符代码。