KeilC51平台 - printf打印注意事项


【全文大纲】 : https://blog.youkuaiyun.com/Engineer_LU/article/details/135149485


1 . 前言总结

平台调试用到 printf 接口打印一些数据,但是由于printf用到可变形参的概念,又由于KeilC51为8位平台,当我们在可变形参传入8位,16位,32位变量时,printf接口是不知道的,因为不像MDK平台是32位地址操作,因此需要在%d中加入对应类型修饰。

2 . 问题现象

以下打印会出现异常,因为printf在运行过程中不知道i是一个16位变量

u16 i = 0x55AA;

printf("value = %d",i);

3 . 解决思路

为了解决以上问题,可把%d改成%hd来修饰,告诉printf在运行过程中,第一个参数是16位变量。若是参数为8位则选择%bd,16位%hd,32位%ld

u16 i = 0x55AA;

printf("value = %hd",i);

4 . 扩展

  1. 符号作用描述

    符号作用
    %d十进制有符号整数
    %u十进制无符号整数
    %f浮点数
    %s字符串
    %c单个字符
    %p指针的值
    %e指数形式的浮点数
    %x无符号以十六进制表示的整数
    %o无符号以八进制表示的整数
    %g自动选择合适的表示法
  2. 而KeilC51扩展出了b,h,l来对输入字节宽的设置:

    扩展字符位数
    b8位
    h16位
    l32位

5 . 总结

本文秉持深入浅出风格展示内容,以上内容可了解到由于KeilC51是8位平台,可变形参并不知道传入的参数的几位的,因此协会标准制定了一个传入位数扩展字符,因此在8位平台里要留意printf的打印输出扩展字符。

技术交流群 : 745662457
群内专注 - 问题答疑,技术研究

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客 - L U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值