2
static void Main(string[] args)
{
    string str_val = "8584348,894";
    //int prefix = Convert.ToInt32(str_val[0]); //prefix = 56 O_o
    //int prefix = (int)str_val[0]; //what, again 56? i need 8!
    int prefix = Convert.ToInt32("8"); //at least this works -_-
}

知道如何将第一个符号转换为正确的数值吗?

4

5 回答 5

11

如果您使用:

Convert.ToInt32(str_val[0]);

那么你实际上是在调用重载:

Convert.ToInt32(char val);

它给出了作为参数传递的 Unicode/Ascii 字符数。

如果要转换第一个字符,则需要将其强制为字符串类型:

Convert.ToInt32(str_val.Substring(0, 1));

这样你就调用了重载:

Convert.ToInt32(string val);

它实际上做了你想要的(将字符串值转换为这个字符串表示的 int 值)。

于 2012-07-26T13:17:32.400 回答
3

您试图解析一个字符串但传入一个字符。首先将字符转换为字符串。

int prefix = Convert.ToInt32(str_val[0].ToString());

所以字符值 8 是 ASCII 值 56,你要做的是将值解释为字符串而不是 ASCII 值。通过使用 .ToString() 方法,您可以将字符转换为以空字符结尾的字符串,该字符串可由 ToInt32 方法读取。

于 2012-07-26T13:17:10.697 回答
2

通过这种方式Convert.ToInt32(str_val[0]),您正在读取将 char 转换为 int 的字符串索引处的字符。int 是它的 ascii

于 2012-07-26T13:16:46.983 回答
1

就像 Bridge 提到的那样,它正在获取 ASCII 值。当您在字符串类上使用索引器仅获取一个字符时,它会将其作为字符返回。如果您阅读char 文档,您会看到它在内部存储为数字 UTF-16 值。它还具有与大多数数字类型之间的隐式转换,可提取 UTF-16 值,或将数字形式转换为字符形式。这就是你正在做的事情。

您的意思是将其解析为 int,而不是获取 UTF-16 值的数字表示。这就是转换答案的全部来源。

于 2012-07-26T13:20:45.593 回答
1
Int32.Parse(str_val[0])

会给你字符串中的数字。

于 2012-07-26T13:48:39.760 回答