1. C++ / Говнокод #9240

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    //Перевод в 2/10 систему
    BOOL
    CChannel::DecTo2Dec(UCHAR Dec,
    					CHAR *Dec2)
    {
    	TCHAR digitstring[10] = {0};
    	INT	Hi = 0;
    	INT	Lo = 0;
    
    	_stprintf_s(digitstring,TEXT("%d"),Dec);
    	INT digitstringLen = _tcslen(digitstring);
    	Lo = _ttoi(digitstring + 1);
    	*(digitstring + 1) = 0;
    	Hi = _ttoi(digitstring);
    	
    	if(digitstringLen>1)
    	{
    		*Dec2 = Lo + Hi * 0x10;
    	}
    	else
    		*Dec2 = Hi;
    	return TRUE;
    }

    Перевод в BCD через строку!

    Запостил: azote, 27 Января 2012

    Комментарии (5) RSS

    • программист явно недооптимизировал!
      ведь он мог сделать %02d и тогда не париться с digitstringLen>1

      на самом деле, я тоже лично видел как у коллег на С# тоже были явные проблемы с переводом в bcd, печально всё это...

      на правах КО:
      .
      	static unsigned char to_bcd(unsigned char c)
      	{
      		c %= 100;
      		return ((c / 10) << 4) | (c % 10);
      	}
      
      	static unsigned char from_bcd(unsigned char c)
      	{
      		return (c & 0x0F) + 10 * (c >> 4);
      	}
      Ответить
    • цо^Wtcl жив!
      Ответить
    • Lo + Hi = ?
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий