电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> MCS51 -> C51语言编程 ->

祝您阅读愉快!

ISPRO下载型编程器

超级51单片机开发板套件

图文显示棒
↑↑本文相关产品介绍↑↑

和printf一样具有可变参数的C51函数


类别:技术文章
来源:本站整理
作者:本站整理
关键字:printf
加入日期:2002-3-29

和printf一样具有可变参数的C51函数

关键是stdarg.h中的几个宏:va_start、va_arg和va_end,下面是一个简化版本的printf(),请参考:

#include "stdio.h"
#include "stdarg.h"

int printf (const char *format, ...)
{
static const char hex[] = "0123456789ABCDEF";
char format_flag;
unsigned int u_val, div_val, base;
char *ptr;
va_list ap;

va_start (ap, format);

for (;;) /* Until full format string read */
{
while ((format_flag = *format++) != '%') /* Until '%' or '\0' */
{
if (!format_flag)
{
va_end (ap);
return (0);
}
putchar (format_flag);
}
switch (format_flag = *format++)
{
case 'c':
format_flag = va_arg(ap, int);
default:
putchar (format_flag);
continue;

case 's':
ptr = va_arg(ap,char *);
while (format_flag = *ptr++)
{
putchar (format_flag);
}
continue;

case 'o':
base = 8;
if (sizeof(int) == 2)
div_val = 0x8000;
else
div_val = 0xC0000000;
goto CONVERSION_LOOP;

case 'd':
base = 10;
if (sizeof(int) == 2)
div_val = 10000;
else
div_val = 1000000000;
goto CONVERSION_LOOP;

case 'x':
base = 16;
if (sizeof(int) == 2)
div_val = 0x1000;
else
div_val = 0x10000000;

CONVERSION_LOOP:
u_val = va_arg(ap,int);
if (format_flag == 'd')
{
if (((int)u_val) < 0)
{
u_val = - u_val;
putchar ('-');
}
while (div_val > 1 && div_val > u_val)
{
div_val /= 10;
}
}
do
{
putchar (hex[u_val / div_val]);
u_val %= div_val;
div_val /= base;
}
while (div_val);
}
}
}



您可能还会关注的相关技术资料:

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号