在c ++中将unsigned long转换为char *

时间:2013-07-18 23:56:21

标签: c++ type-conversion

如何将unsigned long转换为char *。

我正在进行以下循环

for (unsigned long i = 1; i< 7;i++)
{
    callAMethod(5,i);
}

方法定义如下

callAMethod(int, const char*)

当我这样做时,我收到以下错误:

invalid conversion from `unsigned long' to `const char*'

我该怎么做?

2 个答案:

答案 0 :(得分:1)

旧C指针算术:

for (unsigned long i = 1; i< 7;i++)
{
    callAMethod(5, (const char*)(&i));
}

但是这样你只需得到长字的8个字节中的一个字节。你想获得长的字符串表示吗?您可以使用STL并获取str()。

答案 1 :(得分:0)

“const char *”表示“字符的地址”。你要传递它值1&lt; = n&lt; 7。

您可以通过强制转换

让编译器假装它们是有效的指向char的值
callAMethod(5, reinterpret_cast<const char*>(i));

但是当我试图在地址“1”处读取内存以查找字符时,我猜测你的应用程序会崩溃

看起来你的“callAMethod”期待一个C风格的字符串,它是一个任意的字符序列,字符串结尾用值为0的字符表示:

const char hello[6] = { 'h', 'e', 'l', 'l', 'o', 0 };

相当于     const char * hello =“hello”;

(当你在C / C ++中用引号写一个字符串时,编译器会自动在存储字符串的末尾添加一个0字节)。

通常,当您将字符串传递给函数时,指纹是“const char *”

所以你真正想知道的是“如何从长值中创建一个字符串”,答案是“printf”。

char str[20];
for (unsigned long i = 1; i < 7; ++i) {
#ifdef _MSC_VER
    sprintf_f(str, "%u", i);
#else
    snprintf(str, sizeof(str), "%u", i);
#endif
    callAMethod(5, str);
}