Преобразование char * без завершающего нуля в int

Я работаю над кодом, который читается в файле данных. Файл часто содержит числовые значения различной длины, закодированные в ASCII, которые мне нужно преобразовать в целые числа. Проблема в том, что они не завершаются нулем, что, конечно, вызывает проблемы с atoi. Решение, которое я использовал, - это вручную добавить нуль к последовательности символов, а затем преобразовать его.

Это код, который я использовал; он работает нормально, но кажется очень тупым.

char *append_null(const char *chars, const int size)
{
    char *tmp = new char[size + 2];

    memcpy(tmp, chars, size);
    tmp[size + 1] = '\0';

    return tmp;
}

int atoi2(const char *chars, const int size)
{
    char *tmp = append_null(chars, size);

    int result = atoi(tmp);

    delete[] tmp;   

    return result;
}

int main()
{
    char *test = new char[20];
    test[0] = '1';
    test[1] = '2';
    test[2] = '3';
    test[3] = '4';

    cout << atoi2(test, 4) << endl;
}

Мне интересно, есть ли лучший способ подойти к этой проблеме.

6
задан cmorse 3 January 2012 в 18:10
поделиться