unsigned int temp;
char buf[std::numeric_limits<unsigned int>::digits10 + 1]; // +1 для завершающего 0, для знакого типа добавить еще +1 для знака
snprintf(buf, sizeof(buf), "%u", temp);
2. Для перевода в число — strtol, strtoul.
char const* s = "123";
char* p;
unsigned long l = strtoul(s, &p, 0);
if(p == s)
// error
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, <Аноним>, Вы писали:
А>>Спасибо! А как на счет
А>>unsigned int64 ??? как тогда?
SDB>_ui64tot()
Вообщето если нужно получить CString то лучше воспользоваться
void CString::Format( LPCTSTR lpszFormat, ... );
,где:
lpszFormat = %[flags] [width] [.precision] [{h | l | I64 | L}]type
Здравствуйте, ZAVRus, Вы писали:
ZAV>Здравствуйте, MaximE, Вы писали:
ME>>См. также boost::lexical_cast (в поиск).
ZAV>Мне кажеться к такой простой операции, как преобразоание числа в строку использовать библиотеку boost ну просто не логично.
Если уж и что то заслуживает претензий то это скорее стандартная библиотека потоков (которая даже не является стлью если подходить формально) и в послежнюю очередь бустовцы которые пользуются стрингстримом.
.
ЮБ>Если уж и что то заслуживает претензий то это скорее стандартная библиотека потоков
Согласен.
ЮБ>(которая даже не является стлью если подходить формально) и в послежнюю очередь бустовцы которые пользуются стрингстримом.
А зачем они ею пользуются??? Их что, под дулом автомата заставили использовать stringstream? Если можно снять все эти ненужные обертки и пользоваться atoi, itoa, sprintf или просто самостоятельно написать примитивные преобразователи. Единственная реальная проблема, которая тут есть -- преобразование чисел с плавающей точкой. Здесь для переносимой реализации нужна поддержка со стороны платформы. Обычно, такая поддержка есть в виде _fcvt и тому подобных функций. На худой конец, можно задействовать sprintf.
Здравствуйте, Шахтер, Вы писали:
Ш>А зачем они ею пользуются??? Их что, под дулом автомата заставили использовать stringstream? Если можно снять все эти ненужные обертки и пользоваться atoi, itoa, sprintf или просто самостоятельно написать примитивные преобразователи. Единственная реальная проблема, которая тут есть -- преобразование чисел с плавающей точкой. Здесь для переносимой реализации нужна поддержка со стороны платформы. Обычно, такая поддержка есть в виде _fcvt и тому подобных функций. На худой конец, можно задействовать sprintf.
Почему не привинтили что то подобное твоему конвертеру? Незнаю, гадать не хочу, подозреваю просто поленились.
[]
> А зачем они ею пользуются??? Их что, под дулом автомата заставили использовать stringstream? Если можно снять все эти ненужные обертки и пользоваться atoi, itoa, sprintf или просто самостоятельно написать примитивные преобразователи. Единственная реальная проблема, которая тут есть -- преобразование чисел с плавающей точкой. Здесь для переносимой реализации нужна поддержка со стороны платформы. Обычно, такая поддержка есть в виде _fcvt и тому подобных функций. На худой конец, можно задействовать sprintf.
А почему бы тебе не спросить все это в gmane.comp.lib.boost.devel и не предложить что-то лучше/проще/быстрее/круче? На rsdn все это неконструктивно и похоже на пустой треп за глаза.
Здравствуйте, MaximE, Вы писали:
ME>Шахтер wrote:
ME>[]
>> А зачем они ею пользуются??? Их что, под дулом автомата заставили использовать stringstream? Если можно снять все эти ненужные обертки и пользоваться atoi, itoa, sprintf или просто самостоятельно написать примитивные преобразователи. Единственная реальная проблема, которая тут есть -- преобразование чисел с плавающей точкой. Здесь для переносимой реализации нужна поддержка со стороны платформы. Обычно, такая поддержка есть в виде _fcvt и тому подобных функций. На худой конец, можно задействовать sprintf.
ME>А почему бы тебе не спросить все это в gmane.comp.lib.boost.devel и не предложить что-то лучше/проще/быстрее/круче?
Пардон, но я не занимаюсь разработкой boost и даже его не использую. Зачем мне что-то куда-то писать?
ME>На rsdn все это неконструктивно и похоже на пустой треп за глаза.
Ну почему. Есть проблема -- конвертировать число в строку. У этой проблемы есть несколько решений, мы эти решения здесь обсуждаем и приводим их достоинства и недостатки. На основе этого обсуждения можно принять то или иное решение. Цель ведь состоит не в том, чтобы опустить кого-то, а в том, чтобы выбрать лучшую альтернативу. На сегодня, boost для решения этой задачи -- не лучшая альтернатива.
Hello, Шахтер!
You wrote on Sun, 19 Dec 2004 00:10:40 GMT:
ME>> А почему бы тебе не спросить все это в gmane.comp.lib.boost.devel и не ME>> предложить что-то лучше/проще/быстрее/круче?
Ш> Пардон, но я не занимаюсь разработкой boost и даже его не использую. Ш> Зачем мне что-то куда-то писать?
Так как rationale для именно такой реализации было выработанно имено там и спор насколько хорошо/эфективно написана реализация должен происходить именно там. Вы boost не разрабатываете, но в этой треде критикуете, а это именно туда, в gmane.comp.lib.boost.devel, за конструктивной критикой.
ME>> На rsdn все это неконструктивно и похоже на пустой треп за глаза.
Ш> Ну почему. Есть проблема -- конвертировать число в строку. У этой Ш> проблемы есть несколько решений, мы эти решения здесь обсуждаем и Ш> приводим их достоинства и недостатки. На основе этого обсуждения можно Ш> принять то или иное решение. Цель ведь состоит не в том, чтобы опустить Ш> кого-то, а в том, чтобы выбрать лучшую альтернативу. На сегодня, boost Ш> для решения этой задачи -- не лучшая альтернатива.
Здается мне, что мнение предвзято. Использование boost::lexical_cast<> дает программе единое понятие, которое согласуется с другими cast (семантически) и позволяет не запоминать множество функций для конвертирования одних типов в другие. Это несколько упрощает чтение исходного кода. У него есть свои недостатки, но использование единого и прозрачного понятия для выполнения преобразований в 90% случаев перекрывает их.
Здравствуйте, MaximE, Вы писали:
ME>Две фундаментальные вещи:
ME>1. Для перевода в строку — snprintf ME>
ME>unsigned int temp;
ME>char buf[std::numeric_limits<unsigned int>::digits10 + 1]; // +1 для завершающего 0, для знакого типа добавить еще +1 для знака
ME>snprintf(buf, sizeof(buf), "%u", temp);
ME>
Здравствуйте, korzhik, Вы писали:
ME>>1. Для перевода в строку — snprintf ME>>
ME>>unsigned int temp;
ME>>char buf[std::numeric_limits<unsigned int>::digits10 + 1]; // +1 для завершающего 0, для знакого типа добавить еще +1 для знака
ME>>snprintf(buf, sizeof(buf), "%u", temp);
ME>>
Здравствуйте, MaximE, Вы писали:
ME>Здравствуйте, korzhik, Вы писали:
ME>>>1. Для перевода в строку — snprintf ME>>>
ME>>>unsigned int temp;
ME>>>char buf[std::numeric_limits<unsigned int>::digits10 + 1]; // +1 для завершающего 0, для знакого типа добавить еще +1 для знака
ME>>>snprintf(buf, sizeof(buf), "%u", temp);
ME>>>