8位机如何显示超过255的16位的数字?

背景

今天写代码,需要显示数据发送次数,次数递增,最大有可能有几万次。但是测试时发现数字到了255之后便从零开始显示。显然是数据越界了。
其实这个问题很好解决,主要是数据类型转换就可以。但是如果遇到一个8位机,而且设备提供的接口函数中,数据的类型只有8位整形,该怎么办?就像我今天遇到的。

解决

设备提供一个现实数据的接口函数:
void _putstr(U8 *p);
其输入只能是8位整型,也即大于255的数字无法正确显示出来,这就需要做一些数字的转换。
例,需要显示的数字为65535,可以将其拆分为65535显示。如果1001可以拆分为10 01 进行显示。

下面是代码实现:

void Show16data( U8 line,U8 n,U16 data )
{
    char num_temp[1];
    U8 dataH,dataM,dataL;
    _gotoxy(n,line);

    if (data >= 10000)
    {
        dataH =(U8)(data / 1000);
        dataM = (U8)((data%1000)/10);
        dataL = (U8)(data%10);

        sprintf(num_temp,"%02d",dataH); 
        // 注意一定格式化字符串的时候两位数要用%02d来控制  如20011 才能正确显示20011,否则有可能显示2011
        _putstr(num_temp);  
        sprintf(num_temp,"%02d",dataM);
        _putstr(num_temp);          
        sprintf(num_temp,"%1d",dataL); //个位数需要用 %1d来控制
        _putstr(num_temp);  
    }
    else if (data >= 1000)
    {
        dataH =(U8)(data / 100);
        dataL = (U8)(data%100);
        sprintf(num_temp,"%02d",dataH);
        _putstr(num_temp);          
        sprintf(num_temp,"%02d",dataL);
        _putstr(num_temp);  
    }
    else if (data >= 100)
    {
        dataH =(U8)(data / 10);
        dataL = (U8)(data%10);
        sprintf(num_temp,"%02d",dataH);
        _putstr(num_temp);          
        sprintf(num_temp,"%1d",dataL);
        _putstr(num_temp);  
    }
    else
    {
        sprintf(num_temp,"%02d",data);
        _putstr(num_temp);  
    }
}

另外需要注意的是,数字拆分后最好加上强制数据转换 。
dataH =(U8)(data / 100);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

董董灿是个攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值