Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Преобразование строки в строковую константу |
Автор: Therion 23.5.2008, 10:35 | ||
Подскажите алгоритм преобразования
Заранее благодарен. |
Автор: Alek86 23.5.2008, 10:41 |
а чего ты этой строчкой сделал? |
Автор: Fazil6 23.5.2008, 10:46 |
бред какой-то |
Автор: Therion 23.5.2008, 10:53 | ||
Пишется обертка для одной функции на C++ для программистов на С#. C++ функция в качестве параметра принимает число (но его всегда для удобства чтения кода вводят как строковую константу 'COUN'). В С# я не могу передать в качестве параметра строковую константу, могу только число (что не подходит). Решил что бы программисты на C# писали строчку не длинней 4-х символов, которая бы переобразовывалась в строковую константу и передавалась С++ функцие. Нужна и обратная операция, так как строковая константа используется как ключ в функцияъ типа GetData/SetData. Добавлено через 4 минуты и 13 секунд
Возможно. Но пока что ищу решение и это первое что приходит в голову. Если есть более элегентные предложения буду рад помощи. |
Автор: Therion 23.5.2008, 11:17 | ||
Если вы попробуете такой код
|
Автор: Ulysses4j 23.5.2008, 11:17 | ||||||||
Какое-то сбивчивое объяснение. Если в строке типа char* записаны циферки, а хочется получить соответствуещее целое, то
Ну или писать велосипеды с istring_stream:
И там и там ловить исключения, разумеется. Добавлено через 1 минуту и 31 секунду
Так то значение указателя, который смотрит на литерал 'COUN' где-то в области данных программы, выведется. Добавлено через 13 минут и 59 секунд Ой, и кавычки неправильные, точно vinter сказал (многоязыковость съедает мозг). |
Автор: Therion 23.5.2008, 11:36 |
Понял что так не стоит делать. Не буду использовать в качестве ключей строковые литералы. Спасибо всем ![]() |
Автор: Alek86 23.5.2008, 11:37 | ||
самый прикол, что comeau
хавает Добавлено через 56 секунд но что это может значить - не представляю |
Автор: Therion 23.5.2008, 11:39 |
Конечно хавает. И мне в наследство перешла либа где это используется по всему коду. |
Автор: Rififi 23.5.2008, 13:06 |
такая запись - quick-аналог для #define make_long(a,b,c,d) ((a)<<24)|((b)<<16)|(©<<8)|(d) то есть сonst long id1 = '1234'; const long id2 = make_long('1', '2', '3', '4'); id1 равно id2 насколько легально - не в курсе, лень в Стандарте искать, но раз Комо съедает... |
Автор: mes 23.5.2008, 13:36 | ||||
почему не подходит передaвать число ?? 'COUN' - оно и есть число (и не в коем случае не строка) |
Автор: Therion 23.5.2008, 16:29 |
Для более удобного чтения кода. Намного проще понять для чего ключ 'COUN' (от counter) чем помнить что какое число значит. |
Автор: mes 23.5.2008, 16:33 | ||
неужели на шарпе такое не возможно ? второй вариант использовать енумы |
Автор: Rififi 23.5.2008, 16:39 |
а так еще проще: enum Keys { Counter }; |
Автор: Therion 23.5.2008, 16:47 | ||
Мне не нужно задавать ключи за ранее. Нужно что-бы пользователь функции сам задавал, какие ему удобно. Также я не должен выходить за рамки стиля уже принятого в либе. А в C# нельзя явно указать
|
Автор: mes 23.5.2008, 17:17 | ||
1 каждый пользователь может сам себе енумы завести )) 2. также не было ответа подходит ли конструкция предложенная Rififi? 3. ну а вот преобразование из строки в число
|
Автор: Therion 23.5.2008, 17:30 |
Спасибо большое. Это как раз то что надо ![]() Буду писать обертку ![]() |
Автор: mes 23.5.2008, 18:29 |
я бы не стал использовать в коде "свободные" строчки или набор литер то есть типа GetData ('COUN'); /*1129272654*/ так как компилятор умоет руки если вместо нее Вы напишете 'СОUN' /*-775006898A*/ или если вдруг решите изменить код на другой более подходяший есть вероятность , что в одном из юнитов останется незамеченным и неисправленным. То же относится и к "свободным" цифрам. Но как говорится на вкус и цвет товарища нет )) |
Автор: vinter 23.5.2008, 22:36 | ||
#define COUNT 1234// тоже плохо? |
Автор: Therion 26.5.2008, 11:20 |
Мне тоже не очень нравится использовать 'COUN', но прийдется. Спасибо за ответы ![]() |