如何将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*'
我该怎么做?
答案 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);
}