1

我有一个保存为字符串的数字文件。我希望将此数据加载为 char[] 然后将此数组转换为整数值。我有几个值要加载,并试图避免创建数千个临时字符串的开销..

4

5 回答 5

9

是的

int.Parse(string)

如果您绝对必须将字符串转换为字符数组(不知道为什么),您可以使用:

int.Parse(new string(myCharArray));

进一步说明...

我希望将此数据加载为 char[] 然后将此数组转换为整数值。

是否有特殊原因使用 achar[]而不是仅从文件中读取字符串?您将需要将 astring转换为int无论如何(使用标准转换方法),因此这似乎是一个浪费的步骤。

我有几个值要加载,并试图避免创建数千个临时字符串的开销..

您应该只需要为从文件中读取的每个字符串创建一个字符串。我不知道这里涉及到什么其他处理,但是从文件中读取一个字符串然后转换为一个int不会创建不必要的临时文件。

如果您正在执行大量/未知数量的字符串连接,那么您应该使用 a StringBuilder来构建您的输入,因为它在幕后充当可变字符串(在创建它时也将其初始化为足够大的大小)。即便如此,从磁盘读取数据将(应该)花费更长的时间,而不是创建这些字符串。

于 2012-05-18T18:27:18.707 回答
3

basically

 public static int StringToInt( char[] ch )
        {
            int length = ch.Length;
            int i = 0;
            int lastNumber = 0;
            int returnNumber = 0;
            bool numberNegative = false;
            int startPoint = 0;

            if ( ch[ 0 ] == '-' )
            {
                numberNegative = true;
                startPoint = 1;
            }

            for ( i = startPoint; i < length; i++ )
            {
                if ( ch[ i ] == ' ' )
                {
                    continue;
                }
                else
                {
                    if ( ( ch[ i ] >= '0' ) && ch[ i ] <= '9' )
                    {
                        returnNumber = ch[ i ] - '0';
                        if ( i > 0 )
                            lastNumber = lastNumber * 10;
                        lastNumber = lastNumber + returnNumber;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if ( numberNegative )
                lastNumber = -1 * lastNumber;

            return lastNumber;
        }

Which is from http://www.csharptricks.com/blog/2006/09/string-to-integer-in-c-net.html with the string replaced with char[]

于 2012-05-18T20:53:40.443 回答
2

有几种方法:

虽然,这些方法处理string对象,而不是char[]. 在 C# 中,大多数时候,char[]由于内置string类型[MSDN] ,您不会像在 C 中那样处理。

于 2012-05-18T18:25:59.797 回答
0

这里也是 atoi() 的一种可能实现

int atoi(const char *s)
{
    int n=0, neg=0;
    while (isspace(*s)) s++;
    switch (*s) {
        case '-': neg=1;
        case '+': s++;
    }
    /* Compute n as a negative number to avoid overflow on INT_MIN */
    while (isdigit(*s))
        n = 10*n - (*s++ - '0');
    return neg ? n : -n;
}
于 2017-10-12T18:08:40.383 回答
-1
char c = '1';
int i = Convert.ToInt32(c.ToString(), 10); /*base 10 conversion*/
于 2019-04-01T12:57:36.270 回答