Как мне сделать этот последовательный конфигурационный код настраиваемым? - PullRequest
0 голосов
/ 22 марта 2012

в моем серийном ком-классе
options.c_cflag |= ( CLOCAL | CREAD | CS8);

Я хочу сделать |= ( CLOCAL | CREAD | CS8) редактируемым, так как я прочитаю в этой части текстовый файл и добавлю options.c_cflag.

Я пытался использовать переменную string, но не могу заставить ее работать. Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

OR'd flags дает вам фактическое числовое значение, которое может быть прочитано и преобразовано в это значение с помощью stringstream.

template<typename T>
T flagValue(const std::string& flag_str)
{
    T value;
    std::stringstream ss;
    ss << hex << flag_str;
    ss >> value;
    return value;
}

Но вам нужно знать точное значение OR'd флагов,запишите его куда-нибудь и присвойте options.c_flag с результатом flagValue.

Например flagValue<unsigned int>("1a").

0 голосов
/ 22 марта 2012

Вы должны написать код для достижения этой цели, потому что в основном вы пытаетесь скомпилировать код на языке C во время выполнения.

Вы можете использовать механизмы регулярных выражений или простое разбиение строк для извлечения каждого компонента, а затем преобразовать ихстрока в символ (с таблицей или чем-то вроде: if (! strcmp (text, "CLOCAL")) v = CLOCAL;).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...