在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2261|回复: 2

[原创] 自创printk打印函数。有改进地方请指教。

[复制链接]
发表于 2011-5-17 16:47:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
void printk(int a, char *fmt, ...)
{
int i =0;
int Ret = 0;
char fomt[200];
char Fomtt[200];
int *tmp = &a;
tmp = tmp + 2;

for (i = 0; i < 200; i++)
{
  fomt[i] = fmt[i];
  if (fomt[i] == '\n')
  {
   i = 200;
   Fomtt[0] = Ret;
  }
  if (fomt[i] == '%')
  {
   Ret++;
  }
  if ((fomt[i] == 'd') & (fomt[i-1] == '%'))
  {
   Fomtt[Ret] = 'd';
  }
  if ((fomt[i] == 's') & (fomt[i-1] == '%'))
  {
   Fomtt[Ret] = 's';
  }
  if ((fomt[i] == 'c') & (fomt[i-1] == '%'))
  {
   Fomtt[Ret] = 'c';
  }
  if ((fomt[i] == 'x') & (fomt[i-1] == '%'))
  {
   Fomtt[Ret] = 'x';
  }
}
for (i = 0;i < Ret; i++)
{
   if (Fomtt[i+1] == 's')
   {
    if (a == 1)
    {
     printf("ERROR:%s \n", *tmp);
    }
    if (a == 2)
    {
     printf("INFO:%s \n", *tmp);
    }
   }
   if (Fomtt[i+1] == 'd')
   {
    if (a == 1)
    {
     printf("ERROR:%d \n", *tmp);
    }
   
    if (a == 2)
    {
     printf("INFO:%d \n", *tmp);
    }
   }
   if (Fomtt[i+1] == 'x')
   {
    if (a == 1)
    {
     printf("ERROR:%x \n", *tmp);
    }
   
    if (a == 2)
    {
     printf("INFO:%x \n", *tmp);
    }
   }
   if (Fomtt[i+1] == 'c')
   {
    if (a == 1)
    {
     printf("ERROR:%c \n", *tmp);
    }
   
    if (a == 2)
    {
     printf("INFO:%c \n", *tmp);
    }
   }
  
   tmp++;
}
}
 楼主| 发表于 2011-5-18 16:31:12 | 显示全部楼层
int Othe2Des(const char *Str, const int Othe)
{
        unsigned int i = 0;
        unsigned int b = 0;
        unsigned int l = 0;
        unsigned int j = 0;
        unsigned int x = 0;
        unsigned int s[20] = {0};
        unsigned int v[20] = {0};
        if ((Str == 0ul) && (Othe == 0))
        {
                return 0;
        }
       
        j = Othe;
        while(1)
        {
                if ((Str[i] < 58) && (Str[i] > 47))
                {
                        s[i] = (Str[i] - 48);
                }

                if ((Str[i] < 71) && (Str[i] > 64))
                {
                        s[i] = (Str[i] - 55);
                }

                if (Str[i] == 0)
                {
                        break;
                }
                i++;
        }

        for (i-- ; i > 0; i--)
        {
                while (1)
                {
                        l++;
                        if (l == i)
                        {
                                l = 0;
                                break;
                        }
                        j *= Othe;
                }
                if (i == 0)
                {
                        break;
                }
                b += s[x] * j;
                j = Othe;
                x++;
        }
        return b+2;
}

char *Dec2Othe(const long int Dec, const int Othe)
{
        long int temp = 0;
        int bl = 0;
        int i = 0;
        int Othes[20] = {0};
        char ReturnStr[20] = {0};

        temp = Dec;
        while (1)
        {
                bl = temp%Othe;
                Othes[i] = bl;
                if (temp == 0)
                {
                        break;
                }
                i++;
                temp = temp/Othe;
        }
        bl = 0;
        for (i--;i >= 0;i--)
        {
                if (Othes[i] == 10)
                {
                        ReturnStr[bl] = 'A'        ;
                }
       
                if (Othes[i] == 11)
                {
                        ReturnStr[bl] = 'B'        ;
                }
       
                if (Othes[i] == 12)
                {
                        ReturnStr[bl] = 'C'        ;
                }

                if (Othes[i] == 13)
                {
                        ReturnStr[bl] = 'D'        ;
                }

                if (Othes[i] == 14)
                {
                        ReturnStr[bl] = 'E'        ;
                }

                if (Othes[i] == 15)
                {
                        ReturnStr[bl] = 'F'        ;
                }

                if ((Othes[i] < 10) && (Othes[i] >= 0))
                {
                        ReturnStr[bl] = (char)(Othes[i] + 48);       
                }
                bl++;
        }
        return ReturnStr;
}
 楼主| 发表于 2011-5-18 17:56:49 | 显示全部楼层
int StrLen_k(char *str)
{
        int i = 0;
        char *b = 0ul;
        if (str == 0ul)
        {
                return ~0;
        }
        b = str;
        while (1)
        {
                if (b[i] == 0)
                {
                        break;
                }
                i++;
        }
        return i;
}

int StrCpy_k(char *Op, const char *d)
{
        int i = 0;
        if ((Op == 0ul) && (d == 0ul))
        {
                return ~0;
        }
        while (1)
        {
                Op[i] = d[i];
                if (d[i] == 0)
                {
                        break;
                }
                i++;
        }
        return 1;
}

char *Des2Ch(const unsigned int Des)
{
        int Ds = 0;
        int i = 0;
        int n = 0;
        unsigned int dd = 0;
        char zstr[20] = {0};
        char bn[20] = {0};
        dd = Des;
        while (1)
        {
                Ds = dd%10;
                if (Ds == 0)
                {
                        break;
                }
                dd = dd/10;
                zstr[i] = (char)(Ds + 48);
                i++;
        }
        for (i--;i>=0;i--)
        {
                bn[n] = zstr[i];
                n++;
        }
        return bn;
}

int Othe2Des(const char *Str, const int Othe)
{
        unsigned int i = 0;
        unsigned int b = 0;
        unsigned int l = 0;
        unsigned int j = 0;
        unsigned int x = 0;
        unsigned int s[20] = {0};
        unsigned int v[20] = {0};
        if ((Str == 0ul) && (Othe == 0))
        {
                return 0;
        }
       
        j = Othe;
        while(1)
        {
                if ((Str[i] < 58) && (Str[i] > 47))
                {
                        s[i] = (Str[i] - 48);
                }

                if ((Str[i] < 71) && (Str[i] > 64))
                {
                        s[i] = (Str[i] - 55);
                }

                if (Str[i] == 0)
                {
                        break;
                }
                i++;
        }

        for (i-- ; i > 0; i--)
        {
                while (1)
                {
                        l++;
                        if (l == i)
                        {
                                l = 0;
                                break;
                        }
                        j *= Othe;
                }
                if (i == 0)
                {
                        break;
                }
                b += s[x] * j;
                j = Othe;
                x++;
        }
        return b+2;
}


char *Dec2Othe(const long int Dec, const int Othe)
{
        long int temp = 0;
        int bl = 0;
        int i = 0;
        int Othes[20] = {0};
        char ReturnStr[20] = {0};

        temp = Dec;
        while (1)
        {
                bl = temp%Othe;
                Othes[i] = bl;
                if (temp == 0)
                {
                        break;
                }
                i++;
                temp = temp/Othe;
        }
        bl = 0;
        for (i--;i >= 0;i--)
        {
                if (Othes[i] == 10)
                {
                        ReturnStr[bl] = 'A'        ;
                }
       
                if (Othes[i] == 11)
                {
                        ReturnStr[bl] = 'B'        ;
                }
       
                if (Othes[i] == 12)
                {
                        ReturnStr[bl] = 'C'        ;
                }

                if (Othes[i] == 13)
                {
                        ReturnStr[bl] = 'D'        ;
                }

                if (Othes[i] == 14)
                {
                        ReturnStr[bl] = 'E'        ;
                }

                if (Othes[i] == 15)
                {
                        ReturnStr[bl] = 'F'        ;
                }

                if ((Othes[i] < 10) && (Othes[i] >= 0))
                {
                        ReturnStr[bl] = (char)(Othes[i] + 48);       
                }
                bl++;
        }
        return ReturnStr;
}

void printk(char *fmt, ...)
{

        int i =0;
        int f = 0;
        int Len = 0;
        int m = 0;
        char fomt[200] = {0};
        char *nesr = 0ul;
        int *tmp = &fmt;
        tmp++;
       
        for (i = 0; i < 200; i++)
        {
                fmt[i];
                if (fmt[i] == '\n')
                {i = 200;}

                if (fmt[i] == '%')
                {
                    i++;
                        switch(fmt[i])
                        {
                                case 'd':
                                        {
                                                StrCpy_k(nesr,Des2Ch(Othe2Des(*tmp, 16)));
                                                Len = StrLen_k(nesr);
                                                for (m=0;m<Len;m++)
                                                {
                                                        fomt[f] = nesr[m];
                                                        f++;
                                                }
                                        }

                                case 'x':
                                        {*tmp;}
                               
                                case 's':
                                        {*tmp;}

                                case 'c':
                                        {*tmp;}
                                tmp++;
                        }
                }
                else
                {       
                        fomt[f] = fmt[i];
                        f++;
                }
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-28 21:07 , Processed in 0.017589 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表