C 无符号长到长字符串转换
我尝试将无符号long-long转换为如下字符串C 无符号长到长字符串转换,c,C,我尝试将无符号long-long转换为如下字符串 unsigned long long Data = 12; char Str[20]; sprintf(Str, "%lld",Data); 当我想看的时候 但我总是看到00 Str[0],Str[1]....; 怎么了 在大多数情况下,%llu应该可以做到这一点。但您可能必须在某些Windows平台上使用%I64u。%lld用于有符号的长,请改用%llu。%llu应在添加到标准中时工作。然而,您可以使用安全版本SNPrTNF或考虑编写自己
unsigned long long Data = 12;
char Str[20];
sprintf(Str, "%lld",Data);
当我想看的时候
但我总是看到00
Str[0],Str[1]....;
怎么了 在大多数情况下,
%llu
应该可以做到这一点。但您可能必须在某些Windows平台上使用%I64u
。%lld
用于有符号的长
,请改用%llu
。%llu应在添加到标准中时工作。然而,您可以使用安全版本SNPrTNF或考虑编写自己的函数优于SNPRTNF。这是一个你可能感兴趣的
char *ulltostr(uint64 value, char *ptr, int base)
{
uint64 t = 0, res = 0;
uint64 tmp = value;
int count = 0;
if (NULL == ptr)
{
return NULL;
}
if (tmp == 0)
{
count++;
}
while(tmp > 0)
{
tmp = tmp/base;
count++;
}
ptr += count;
*ptr = '\0';
do
{
res = value - base * (t = value / base);
if (res < 10)
{
* --ptr = '0' + res;
}
else if ((res >= 10) && (res < 16))
{
* -- ptr = 'A' - 10 + res;
}
} while ((value = t) != 0);
return(ptr);
}
char*ulltostr(uint64值,char*ptr,int基)
{
uint64 t=0,res=0;
uint64 tmp=数值;
整数计数=0;
if(NULL==ptr)
{
返回NULL;
}
如果(tmp==0)
{
计数++;
}
而(tmp>0)
{
tmp=tmp/基础;
计数++;
}
ptr+=计数;
*ptr='\0';
做
{
res=值-基*(t=值/基);
如果(res<10)
{
*--ptr='0'+res;
}
否则,如果((res>=10)和(&(res<16))
{
*——ptr='A'-10+res;
}
}而((值=t)!=0);
返回(ptr);
}
您确定“%lld”有效吗?我只在文档中看到“%ld”。据我所知,这是有效的代码(只是您应该使用u
而不是d
)。给我们更多关于你真正做了什么以及哪里出了问题的指示。如果这是针对PIC的,那么sprintf对未签名长-长-长的支持充其量只是粗略的,问题在于库文件。OP可能没有使用Windows平台。。。使用USART_传输(“x”);可能是PIC或Atmega平台。