fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4.  
  5. const char OUTS_ON[] = "<outs_on>";
  6. const char OUTS_ON_CLOSED[] = "<outs_on/>";
  7. const char OUTS_ON_CLOSING[] = "</outs_on>";
  8.  
  9. void get_state_outs(uint8_t state_outs, char* state_outs_str)
  10. {
  11. // max string: <outs_on>1,2,3,4,5,6,7,8,</outs_on>
  12. if(state_outs == 0) //особливу ситуацію обробяємо на початку, щоб далі можна було рівень знизити
  13. {
  14. strcpy(state_outs_str, OUTS_ON_CLOSED);
  15. return;
  16. }
  17.  
  18. char *target = state_outs_str;
  19. strcpy(target, OUTS_ON);
  20. target += sizeof(OUTS_ON)-1; //OUTS_ON має в кінці \0, але нам він не потрібен
  21.  
  22. for( uint8_t i=1, bits = state_outs; bits!=0; ++i, bits>>=1) //якщо платформа не дозволяє - винесіть проголошення i з циклу
  23. {
  24. if(bits&0x1)
  25. {
  26. *target++ = '0'+i; //0x31 - абсолютно незрозуміло, про що мова
  27. *target++ = ',';
  28. }
  29. }
  30. strcpy(target, OUTS_ON_CLOSING);
  31. }
  32.  
  33. int main(void) {
  34. char buffer[100];
  35. get_state_outs(0, buffer);//empty
  36. printf("%s\n",buffer);
  37. get_state_outs(0x6, buffer);//2,3
  38. printf("%s\n",buffer);
  39. get_state_outs(0xFF, buffer);//full
  40. printf("%s\n",buffer);
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 4948KB
stdin
Standard input is empty
stdout
<outs_on/>
<outs_on>2,3,</outs_on>
<outs_on>1,2,3,4,5,6,7,8,</outs_on>