C 无符号长到长字符串转换

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或考虑编写自己

我尝试将无符号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或考虑编写自己的函数优于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平台。