2015-09-15 4 views
0

Чтение текстового файла и извлечение слов из файла и помещение их в массив из const char*. Однако мое требование заключается в преобразовании этих const char* переменных в различные типы данных, как DWORD,LPBYTE, WORD,ULONG и т.д.Преобразование типа данных C++

В настоящее время моей реализации для преобразования выглядит следующим образом:

DWORD GetDword(const char* msg) 
{ 
    if (int strcmp(msg, "MyRequiredData") > 0) 
     { 
      return MyRequiredData ; 
     } 
} 

Предположим «MSG» является одной из строк данных массива , Чтобы я получил необходимые данные в типе DWORD в обратном порядке с помощью этого метода. И та же реализация для других типов тоже.
Здесь меня беспокоят почти данные жесткого кодирования. Есть ли лучший способ сделать это? Могу ли я преобразовать свои строки в типы данных, которые я хочу?

+2

Я не совсем уверен, что именно вы пытаетесь достичь (ваш пример псевдокода немного обогащен «псевдо» и немного отсутствует в «примере». Но похоже, что вы хотите реализовать парсер, есть различные способы сделать это. Традиционный [Bison] (https://www.gnu.org/software/bison/), современный и более мощный [Boost.Spirit] (http: //www.boost .org/doc/libs/release/libs/spirit/doc/html/index.html). Ни одно из «быстрых» решений, поскольку они требуют привыкания к технологии и, вероятно, также потребуют полной перезаписи того, что вы – DevSolar

+0

Спасибо за ответ @DevSolar. То, чего вы пытаетесь достичь, это, как вы сказали, разбор. В настоящее время мы изучаем различные способы, включая Boost.Spirit и Lexical_cast. Просто пытаюсь понять, есть ли менее сложные способы реализации синтаксического анализа – Rajagopal

ответ

-2

Вы пробовали использовать следующую форму типа литья?

DWORD GetDword(const char* msg) 
{ 
    return (DWORD) msg; 
} 

Хотя вы должны убедиться, что первым, если содержание msg может быть преобразовано в DWORD, чтобы получить правильное значение.

+1

Errr ... вы предлагаете лить строку * (чтение из файла * text *) в * integer *? – DevSolar

+0

Он сказал, что он извлекал «слова», которые, как я полагаю, можно конвертировать в другие типы данных, в другие функции. В своем примере псевдокод/​​фактический код, он хочет вернуть преобразованное значение const char * в DWORD. Его вопрос касается обращения, а не разбора, не так ли? –

+0

У него есть 'msg', который является строкой C (обрабатывает его с помощью' strcmp() 'в своем псевдокоде). Это означает, что даже если он * содержит * числа («123»), это будет массив значений ASCII символов «1», «2» и «3» соответственно ... Вы хотите их преобразовать, вы используете 'strtol()', а не '' (DWORD) 'cast. Но ваш ответ даже не делает *, что * - вы бросаете ** указатель ** на DWORD ... – DevSolar

Смежные вопросы