标题: 关于C语言长整型数转换为字符串unsigned char LongToString [打印本页]

作者: 茶水    时间: 2021-2-3 22:55
标题: 关于C语言长整型数转换为字符串unsigned char LongToString
看到这段程序懵逼,哪位可以帮我逐句注解一下么?十分感谢。
/*长整型数转换为字符串,str为字符串指针,dat为待转换数,返回值为字符串长度*/
  1. unsigned char LongToString(unsigned char *str, signed long dat)
  2. {
  3.         signed char i = 0;
  4.         unsigned char len = 0;
  5.         unsigned char buf[12];
  6.         if(dat < 0)
  7.         {
  8.                 dat = -dat;
  9.                 *str++ = '-';
  10.                 len++;
  11.         }
  12.         do{
  13.                 buf[i++] = dat % 10;
  14.                 dat /= 10;
  15.         }while(dat>0);
  16.         len += i;
  17.         while(i-- > 0)
  18.         {
  19.                 *str++ = buf[i] + '0';
  20.         }
  21.         *str = '\0';
  22.         return len;
  23. }
复制代码

作者: lincheng15    时间: 2021-2-4 10:52
if(dat < 0)这个里面是处理负数的,如果是负数,字符串前面加个负号,字符串长度len加1,
do...while里面就是把每一位数单独拆出来放到buf数组里面去,比如一千一百二十三,1123拆之后放到数组就变成了[3],[2],[1],[1]注意这里顺序反了,最后的while(i--)就是数组里面的数变成字符串顺便把顺序掉过来,3要变成字符'3'需要3+'0',其他同理,由于字符串是以'\0'为结束符,所以最后加了个'\0',这是纯C而已,把C语言功底加深一下就能明了了
作者: 茶水    时间: 2021-2-4 11:42
lincheng15 发表于 2021-2-4 10:52
if(dat < 0)这个里面是处理负数的,如果是负数,字符串前面加个负号,字符串长度len加1,
do...while里面 ...

感谢你的回复,按照你的解释我再理解一下。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1