visual c ++:将int转换为字符串指针

时间:2009-10-12 05:58:23

标签: visual-c++

如何在visual c ++中将整数转换为字符串指针?

10 个答案:

答案 0 :(得分:4)

使用stringstream

#include <sstream>
stringstream ss;
ss << i;
string   s = ss.str();

答案 1 :(得分:2)

在您喜欢的文档中搜索atoi / itoa。或者尝试Boost(www.boost.org - 库转换,lexical_cast)。

这两种方式都可以在不同的编译器中移植。

答案 2 :(得分:2)

有一种非常简单的方法

int i=4;
String ^ s = Convert::ToString(i);

答案 3 :(得分:1)

如果您想要指针地址的文本表示,请使用sprintf。 如果要将数值视为指向字符串的指针,请使用如下所示的转换:

int intValue = ...;
char * charPtr = (char*)intValue;

答案 4 :(得分:1)

如果使用CString,则可以使用如下的Format()方法:

int val = 489;
CString s;
s.Format("%d", val);

答案 5 :(得分:1)

学习任何C和C ++教科书。这个简单的C代码应该在Visual C ++和其他C ++中编译并将489转换为“489”:

char result[100];
int num = 489;
sprintf(result, "%d", num);

答案 6 :(得分:0)

基本C ++

char text[100];
int num=123;
itoa(num,text,10);

答案 7 :(得分:0)

这就是我在作业中的表现,因为我们只允许使用一些预定的库。我很确定它不被认为是“最佳实践”;)

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

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

    return str;
}

答案 8 :(得分:0)

我认为最简单的是:

int i;
String s=i.toString();
// It is about Visual C++

答案 9 :(得分:-1)

你有作业吗?一个通用的,测试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