0

如何将 unsigned long 转换为 char*。

我正在执行以下 for 循环

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

方法定义如下

callAMethod(int, const char*)

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

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

我该怎么做呢?

4

2 回答 2

1

旧 C 指针算法:

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

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

于 2013-07-19T00:08:45.980 回答
0

“const char*”表示“字符的地址”。你将传递它的值 1 <= n < 7。

您可以要求编译器通过强制转换来假装它们是有效的指向字符的值

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);
}
于 2013-07-19T04:11:50.360 回答