#include <stdio.h>
#include <stdint.h>
#include <string.h>
const char OUTS_ON[] = "<outs_on>";
const char OUTS_ON_CLOSED[] = "<outs_on/>";
const char OUTS_ON_CLOSING[] = "</outs_on>";
void get_state_outs(uint8_t state_outs, char* state_outs_str)
{
// max string: <outs_on>1,2,3,4,5,6,7,8,</outs_on>
if(state_outs == 0) //особливу ситуацію обробяємо на початку, щоб далі можна було рівень знизити
{
strcpy(state_outs_str
, OUTS_ON_CLOSED
); return;
}
char *target = state_outs_str;
target += sizeof(OUTS_ON)-1; //OUTS_ON має в кінці \0, але нам він не потрібен
for( uint8_t i=1, bits = state_outs; bits!=0; ++i, bits>>=1) //якщо платформа не дозволяє - винесіть проголошення i з циклу
{
if(bits&0x1)
{
*target++ = '0'+i; //0x31 - абсолютно незрозуміло, про що мова
*target++ = ',';
}
}
strcpy(target
, OUTS_ON_CLOSING
); }
int main(void) {
char buffer[100];
get_state_outs(0, buffer);//empty
get_state_outs(0x6, buffer);//2,3
get_state_outs(0xFF, buffer);//full
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKY29uc3QgY2hhciBPVVRTX09OW10gPSAiPG91dHNfb24+IjsKY29uc3QgY2hhciBPVVRTX09OX0NMT1NFRFtdID0gIjxvdXRzX29uLz4iOwpjb25zdCBjaGFyIE9VVFNfT05fQ0xPU0lOR1tdID0gIjwvb3V0c19vbj4iOwoKdm9pZCBnZXRfc3RhdGVfb3V0cyh1aW50OF90IHN0YXRlX291dHMsIGNoYXIqIHN0YXRlX291dHNfc3RyKQp7CiAgLy8gbWF4IHN0cmluZzogPG91dHNfb24+MSwyLDMsNCw1LDYsNyw4LDwvb3V0c19vbj4KICBpZihzdGF0ZV9vdXRzID09IDApIC8v0L7RgdC+0LHQu9C40LLRgyDRgdC40YLRg9Cw0YbRltGOINC+0LHRgNC+0LHRj9GU0LzQviDQvdCwINC/0L7Rh9Cw0YLQutGDLCDRidC+0LEg0LTQsNC70ZYg0LzQvtC20L3QsCDQsdGD0LvQviDRgNGW0LLQtdC90Ywg0LfQvdC40LfQuNGC0LgKICB7CiAgICBzdHJjcHkoc3RhdGVfb3V0c19zdHIsIE9VVFNfT05fQ0xPU0VEKTsKICAgIHJldHVybjsKICB9CiAgCiAgY2hhciAqdGFyZ2V0ID0gc3RhdGVfb3V0c19zdHI7CiAgc3RyY3B5KHRhcmdldCwgT1VUU19PTik7CiAgdGFyZ2V0ICs9IHNpemVvZihPVVRTX09OKS0xOyAvL09VVFNfT04g0LzQsNGUINCyINC60ZbQvdGG0ZYgXDAsINCw0LvQtSDQvdCw0Lwg0LLRltC9INC90LUg0L/QvtGC0YDRltCx0LXQvQogIAogIGZvciggdWludDhfdCBpPTEsIGJpdHMgPSBzdGF0ZV9vdXRzOyBiaXRzIT0wOyArK2ksIGJpdHM+Pj0xKSAvL9GP0LrRidC+INC/0LvQsNGC0YTQvtGA0LzQsCDQvdC1INC00L7Qt9Cy0L7Qu9GP0ZQgLSDQstC40L3QtdGB0ZbRgtGMINC/0YDQvtCz0L7Qu9C+0YjQtdC90L3RjyBpINC3INGG0LjQutC70YMKICB7CiAgICBpZihiaXRzJjB4MSkKICAgIHsKICAgICAgKnRhcmdldCsrID0gJzAnK2k7IC8vMHgzMSAtINCw0LHRgdC+0LvRjtGC0L3QviDQvdC10LfRgNC+0LfRg9C80ZbQu9C+LCDQv9GA0L4g0YnQviDQvNC+0LLQsAogICAgICAqdGFyZ2V0KysgPSAnLCc7CiAgICB9CiAgfQogIHN0cmNweSh0YXJnZXQsIE9VVFNfT05fQ0xPU0lORyk7Cn0KCmludCBtYWluKHZvaWQpIHsKCWNoYXIgYnVmZmVyWzEwMF07CglnZXRfc3RhdGVfb3V0cygwLCBidWZmZXIpOy8vZW1wdHkKCXByaW50ZigiJXNcbiIsYnVmZmVyKTsKCWdldF9zdGF0ZV9vdXRzKDB4NiwgYnVmZmVyKTsvLzIsMwoJcHJpbnRmKCIlc1xuIixidWZmZXIpOwoJZ2V0X3N0YXRlX291dHMoMHhGRiwgYnVmZmVyKTsvL2Z1bGwKCXByaW50ZigiJXNcbiIsYnVmZmVyKTsKCXJldHVybiAwOwp9Cg==