например a=5 str='5' a=255 str='255'
причем иногда нужно доводить длину строки до 2 или 3-х символов требуемого размера дополняя слева нулями
например a=5 str='05' либо a=27 str='027'
первый вариант - две разные функци для фиксированных длин строк
если дополнять нулями не нужно то использую просто sprintf:
Код: Выделить всё
void Byte_To_ASCII_BCD_2 (byte b, unsigned char *str)
{
unsigned char buf[4]; // '2' '5' '5' '\0'
sprintf (buf,"%u",b);
if ((strlen(buf)==0)|(strlen(buf)==3)) {*str='0'; str=str+1;*str='0'; }//этот случай если sprintf выдаст пустую строку (хотя такого быть не должно так как даже на ноль должно быть '0'
if (strlen(buf)==1) {*str='0'; str=str+1;*str=buf[0]; }
if (strlen(buf)==2) {*str=buf[0]; str=str+1;*str=buf[1]; }
str=str+1;*str='\0';
}//proc
void Byte_To_ASCII_BCD_3 (byte b, unsigned char *str)
{
unsigned char buf[4]; // '2' '5' '5' '\0'
sprintf (buf,"%u",b);
if (strlen(buf)==0) {*str='0'; str=str+1;*str='0'; str=str+1;*str='0'; }//этот случай если sprintf выдаст пустую строку (хотя такого быть не должно так как даже на ноль должно быть '0'
if (strlen(buf)==1) {*str='0'; str=str+1;*str='0'; str=str+1;*str=buf[0]; }
if (strlen(buf)==2) {*str='0'; str=str+1;*str=buf[0]; str=str+1;*str=buf[1]; }
if (strlen(buf)==3) {*str=buf[0]; str=str+1;*str=buf[1]; str=str+1;*str=buf[2]; }
str=str+1;*str='\0';
}//proc
а код получился еще больше
честно говоря я его еще и не проверял - может он и не рабочий
Код: Выделить всё
//превращает байт в строку, поэтому для str достаточно 4 байта размера
//f- 0-без ведущих нулей
// 1-3 - обязательная длина (добавлять ведущие нули)
void ByteToStr(byte f,byte b, unsigned char *str)
{
byte sotni,desatki,edinici;
*str = _T('\0');
sotni = b/100; //255/100=2 5/100 = 0
desatki = ( b - (sotni*100) ) / 10;// (255-(2*100)) / 10 =5 5-(0*100) /10 = 0
edinici = ( b - (sotni*100) - (desatki*10) ) % 10; //( 255 - (2*100) - (5*10) ) % 10;
//для случая без ведущих нулей
if ( (f==3) | ( (f==0)&(sotni!=0) ) )
{
*str = sotni+0x30; str=str+1;
*str = desatki+0x30; str=str+1;
*str = edinici+0x30; str=str+1;
*str = _T('\0');
return;
}
//для случая без ведущих нулей
if ( (f==2) | ( (f==0)&(sotni==0)&(desatki!=0) ) )
{
*str = desatki+0x30; str=str+1;
*str = edinici+0x30; str=str+1;
*str = _T('\0');
return;
}
//для случая без ведущих нулей
if ( (f==1) | ( (f==0)&(sotni==0)&(desatki==0)&(edinici!=0) ) )
{
*str = edinici+0x30; str=str+1;
*str = _T('\0');
return;
}
//если число ноль то
if ( (f==0)&(sotni==0)&(desatki==0)&(edinici==0) )
{
*str=_T('0'); str=str+1;
*str = _T('\0');
}
}//proc
Что посоветуете?


