Как уже отмечали другие, я бы начал с sscanf()
, printf()
и / или strtoul()
. Они достаточно быстры для большинства приложений и с меньшей вероятностью имеют ошибки. Однако я скажу, что эти функции являются более общими, чем вы могли бы ожидать, поскольку они имеют дело с наборами символов, не относящимися к ASCII, с числами, представленными в любой базе, и так далее. Для некоторых доменов можно превзойти библиотечные функции.
Итак, сначала измерьте, и если производительность этих преобразований действительно является проблемой, тогда:
1) В некоторых приложениях / доменах определенные числа появляются очень часто, например, ноль, 100, 200, 19,95, может быть настолько распространенным, что имеет смысл оптимизировать ваши функции для преобразования таких чисел с помощью набора операторов if (). , а затем вернуться к общим функциям библиотеки.
2) Используйте поиск по таблице, если наиболее распространены 100 чисел, а затем воспользуйтесь библиотечной функцией. Помните, что большие таблицы могут не помещаться в вашем кэше и могут потребовать нескольких косвенных указаний для разделяемых библиотек, поэтому тщательно измерьте эти параметры, чтобы убедиться, что вы не снижаете производительность.
Возможно, вы также захотите взглянуть на функции boost lexical_cast, хотя, по моему опыту, последние относительно сравнимы со старыми добрыми функциями C.
Несмотря на то, что многие говорили это, стоит повторяться снова и снова: не оптимизируйте эти преобразования, пока у вас не появятся доказательства того, что они представляют собой проблему. Если вы оптимизируете, измерьте вашу новую реализацию, чтобы убедиться, что она быстрее и , чтобы убедиться, что у вас есть тонна модульных тестов для вашей собственной версии, потому что вы будете вводить ошибки: - (