Как перевести строку, в которой записано число в двоичной системе, в число? Код (C++): String bytes = "B10101010"; //двоичная система int i = int(bytes); //так не работает //должно получится: i = B10101010 P.S. Делаю скетч для сдвигового регистра.
Если строка именно в таком формате, "B10101010" - то навскидку как-то так: Код (C++): byte convert(const String& num) { byte result = 0; if(!num.length()) return result; const char* strBegin = num.c_str(); const char* strEnd = strBegin + num.length() - 1; byte bitPos = 0; while(strEnd != strBegin) { byte b = *strEnd - '0'; if(b) result |= (1 << bitPos); strEnd--; bitPos++; } return result; } Это совсем навскидку, при необходимости допилИте, если где апшипся.
ну тогда сдвиг, преобразование и сразу в порт, все как сказал DIYMan вот сдесь можно пихать прямо в порт if(b){ portx=1; синхронизация; }else{ portx=0; синхронизация; }
Вообще конечно задача странная: сначало кто-то формирует строку, вместо того, чтобы тупо передать байт. Потом мы эту строку переводим обратно в байт. Вопрос: зачем лишние телодвижения?
исключающее или b00000001^=b00000001 байт 0 примет значение 0, если применить второй раз то примет значение 1
Битовыми операциями, вестимо. Неоптимальный говнокод: Код (C++): void invertBit(byte& num, byte bitPos) { if(num & (1 << bitPos)) num &= ~(1 << bitPos); else num |= (1 << bitPos); } Говнокод пооптимальней: Код (C++): void invertBit(byte& num, byte bitPos) { num ^= (1 << bitPos); }
подытожим сказанное) пока i меньше 8(один байт 8 бит ) делаем лог и с нашим байтом(двигаем старшим байтом вперед) устанавливаем на выходе синхронизации 0 0x80 это b10000000 двоичных,если старший бит единица то выставляем на информационном выходе 1 иначе 0, выставляем на синхронизирующем выходе 1, данные защелкиваются в сдвиговый регистр, двигаем байт на 1 влево, седьмой бит станет восьмым,затем продолжаем пока i<8(сдвигаем весь байт)