Visual C ++: конвертировать int в указатель на строку - PullRequest
1 голос
/ 12 октября 2009

как преобразовать целое число в строковый указатель в Visual C ++?

Ответы [ 10 ]

4 голосов
/ 12 октября 2009

Использовать поток строк

#include <sstream>
stringstream ss;
ss << i;
string   s = ss.str();
2 голосов
/ 12 октября 2009

Есть очень простой метод

int i=4;
String ^ s = Convert::ToString(i);
2 голосов
/ 12 октября 2009

поиск atoi / itoa в вашей любимой документации. Или попробуйте Boost ( www.boost.org - преобразование библиотеки, lexical_cast).

Оба способа переносимы между разными компиляторами.

1 голос
/ 12 октября 2009

Возьмите любой учебник по Си и Си ++. Этот простой код C должен работать в Visual C ++ и других C ++ компиляторах и преобразовывать 489 в «489»:

char result[100];
int num = 489;
sprintf(result, "%d", num);
1 голос
/ 12 октября 2009

Если вы используете CString, то можете использовать метод Format () следующим образом:

int val = 489;
CString s;
s.Format("%d", val);
1 голос
/ 12 октября 2009

Если вы хотите текстовое представление адреса указателя, используйте sprintf . Если вы хотите обработать числовое значение как указатель на строку, используйте приведение типа так:

int intValue = ...;
char * charPtr = (char*)intValue;
0 голосов
/ 27 ноября 2015

Я думаю, что самым простым будет:

int i;
String s=i.toString();
// It is about Visual C++
0 голосов
/ 02 ноября 2009

Вот как я это сделал на домашней работе, поскольку нам разрешалось использовать только некоторые заранее определенные библиотеки. Я уверен, что это не считается «лучшей практикой»;)

string int2string(int integer) {
    string str;
    int division = integer;

    while (division > 0) {
        str = char('0' + (division % 10)) + str;
        division = division / 10;
    }

    return str;
}
0 голосов
/ 13 октября 2009

базовый C ++

char text[100];
int num=123;
itoa(num,text,10);
0 голосов
/ 12 октября 2009

У тебя есть домашнее задание? универсальный, проверено, если g ++, http://effocore.googlecode.com/svn/trunk/devel/effo/codebase/addons/inl/include/impl/algo_impl.h :

#ifdef __cplusplus

static inline char *int2a_put(uintptr_t i, char *s)
{
    do {
        *s++ = '0' + i % 10;
        i /= 10;
    } while (i);

    return s;
}

static inline void int2a_reverse(char *head, char *tail)
{
    for (*tail = '\0'; --tail > head; ++head) {
        /* exchange */
        (*head) ^= (*tail);
        (*tail) ^= (*head);
        (*head) ^= (*tail);
    }
}

template<typename t>
static inline const char *int2a(t i, char *s)
{
    char *p;
    char *ret = s;
    bool f = false;

    p = s;
    if (i < 0) { 
        *p++ = '-';
        ++ s;
        /* 
         * In limits.h, INT_MAX was defined as 
         *   maximum values a `signed int' can hold.
         * and LONG_MAX was defined as maximum values 
         *   a `signed long int' can hold. 
         */
        switch (sizeof(t)) {
        case 8:
            {
                /* 
                 * Inject \p a to prevent from complaint 
                 *   of compiler.
                 */
                ef64_t a = (ef64_t)i;
                if (-LLONG_MAX > a) {
                    i = (t)LLONG_MAX;
                    f = true;
                }
            }
            break;
        case 4:
        case 2:
        case 1:
            {
                /* 
                 * Inject \p a to prevent from complaint 
                 *   of compiler. 
                 */
                int a = (int)i;
                if (-INT_MAX > a) {
                    i = (t)INT_MAX;
                    f = true;
                }
            }
            break;
        default:
            break;
        }
        if (!f) {
            i = -i;
        }
    }

    p = int2a_put((uintptr_t)i, p);

    if (f) {
        ++ *s;
    }

    int2a_reverse(s, p);

    return ret;
}

/*
 * No "static" otherwise g++ complains 
 *   "explicit template specialization cannot have a storage class"
 */
template<>
/*static*/ inline 
const char *int2a<uintptr_t>(uintptr_t i, char *s)
{
    char *p = int2a_put(i, s);

    int2a_reverse(s, p);

    return s;
}

#else
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...