见一种情况
uint64_t trackuid = 2906622092;
现在我想在函数参数为const char*
func(const char *uid)
{
printf("uid is %s",uid);
}
这应该打印
uid is 2906622092
我该怎么做?
答案 0 :(得分:9)
// length of 2**64 - 1, +1 for nul.
char buff[21];
// copy to buffer
sprintf(buff, "%" PRIu64, trackuid);
// call function
func(buff);
这需要C99,但是,我的记忆显示MS编译器没有PRIu64
。 (PRIu64
位于inttypes.h
。)YMMV。
答案 1 :(得分:8)
使用snprintf
将数字转换为字符串。对于stdint.h
标题中的整数类型,请使用inttypes.h
中的格式宏。
#define __STDC_FORMAT_MACROS // non needed in C, only in C++
#include <inttypes.h>
#include <stdio.h>
void func(const char *uid)
{
printf("uid is %s\n",uid);
}
int main()
{
uint64_t trackuid = 2906622092;
char buf[256];
snprintf(buf, sizeof buf, "%"PRIu64, trackuid);
func(buf);
return 0;
}
答案 2 :(得分:1)
char buf[40];
memset (buf, 0, sizeof(buf));
snprintf (buf, sizeof(buf)-1, "%llu", (unsigned long long) trackuid);
func(buf);
应该在sizeof(unsigned long long) == sizeof(uint64_t)
修改强>
但是,更好的答案是Maxim Yegorushkin使用"%"PRIu64