Green-sell.info

Новые технологии
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Itoa linux c

Где находится функция itoa в Linux?

itoa() -это очень удобная функция для преобразования числа в строку. Linux, кажется, не имеет itoa() , есть ли эквивалентная функция или я должен использовать sprintf(str, «%d», num) ?

17 Ответов

EDIT: Извините, я должен был помнить, что эта машина решительно нестандартна, подключив различные нестандартные реализации libc для академических целей 😉

Поскольку itoa() действительно является нестандартным, как упоминалось несколькими полезными комментаторами, лучше всего использовать sprintf(target_string,»%d»,source_int) или (еще лучше, потому что это безопасно от переполнения буфера) snprintf(target_string, size_of_target_string_in_bytes, «%d», source_int) . Я знаю, что это не совсем так лаконично и круто, как itoa() , но, по крайней мере, вы можете написать один раз, запустить везде ™ 😉

Вот старый (отредактированный) ответ

Вы правы, утверждая, что по умолчанию gcc libc не включает itoa() , как и некоторые другие платформы, из-за того, что он технически не является частью стандарта. Смотрите здесь для получения дополнительной информации. Обратите внимание, что вы должны

Конечно, вы уже знаете это, потому что вы хотели использовать itoa() на Linux после того, как предположительно использовали его на другой платформе, но. код (украденный из ссылки выше) будет выглядеть следующим образом:

Пример

Выход:

Надеюсь, это поможет!

Если вы называете его много, совет «just use snprintf» может быть раздражающим. Так вот чего вы наверное хотите:

itoa не является стандартной функцией C. Вы можете реализовать свои собственные. Она появилась в первом издании книги Кернигана и Ричи » язык программирования C» на странице 60. Второе издание C языка программирования («K&R2») содержит следующую реализацию itoa , на стр. 64. В книге отмечается несколько проблем с этой реализацией, в том числе тот факт, что она не корректно обрабатывает самое отрицательное число

Функция reverse , используемая выше, реализована двумя страницами ранее:

Edit: я только что узнал о std::to_string , который идентичен в работе моей собственной функции ниже. Он был представлен в C++11 и доступен в последних версиях gcc, по крайней мере, уже в 4.5, если вы включаете расширения c++0x. Мало того, что itoa отсутствует в gcc, это не самая удобная функция для использования, так как вам нужно кормить его буфером. Мне нужно было что-то, что можно было бы использовать в выражении, поэтому я придумал это:

Обычно было бы безопаснее использовать snprintf вместо sprintf , но буфер тщательно подобран, чтобы быть невосприимчивым к переполнению.

Как писал Мэтт Джей, существует itoa , но это не стандарт. Ваш код будет более портативным, если вы используете snprintf .

Следующая функция выделяет ровно столько памяти, чтобы сохранить строковое представление данного числа, а затем записывает строковое представление в эту область с помощью стандартного метода sprintf .

Не забудьте free up выделенной памяти, когда это необходимо:

N.B. Поскольку snprintf копирует n-1 байта, мы должны вызвать snprintf(buf, len+1, «%ld», n) (а не только snprintf(buf, len, «%ld», n))

Где находится функция itoa в Linux?

В Linux такой функции нет. Вместо этого я использую этот код.

прямое копирование в буфер: 64-битное целое число itoa hex :

Примечание: измените long на long long для 32-битной машины. long to int в случае 32-битного целого числа. м — это радиус. При уменьшении радиуса увеличьте количество символов (переменная i). При увеличении радиуса уменьшите количество символов (лучше). В случае неподписанного типа данных я просто становлюсь 16 + 1.

Вот значительно улучшенная версия решения Archana. Он работает для любого радикса 1-16 и чисел Поделиться Chris Desjardins 16 апреля 2013 в 16:49

я попробовал свою собственную реализацию itoa(), кажется, это работа в двоичном, восьмеричном, десятичном и hex

Если вы просто хотите их распечатать:

Где находится функция itoa в Linux?

Поскольку itoa() не является стандартным в C, существуют различные версии с различными сигнатурами функций.
char *itoa(int value, char *str, int base); часто встречается в *nix.

Если он отсутствует в Linux или если код не хочет ограничивать переносимость,код может сделать его своим.

Ниже приведена версия, которая не имеет проблем с INT_MIN и обрабатывает проблемные буферы: NULL или недостаточный буфер возвращает NULL .

Ниже приведена версия C99 или более поздней версии, которая обрабатывает любую базу [2. 36]

Для кода, совместимого с C89 и далее, замените внутренний цикл на

Чтение кодекса парней, которые этим зарабатывают на жизнь, поможет вам пройти долгий путь.

Посмотрите, как это сделали ребята из MySQL. Источник очень хорошо прокомментирован и научит вас гораздо большему, чем взломанные решения, найденные повсюду.

Я привожу здесь упомянутую реализацию; ссылка находится ЗДЕСЬ Для справки и должна использоваться для чтения полной реализации.

Читать еще:  Как убрать vpn ошибку в хамачи

внутренняя реализация glibc

glibc 2.28 имеет внутреннюю реализацию:

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

По крайней мере, это должно быть надежной реализацией, если вы готовы извлечь его.

Этот вопрос задает, как свернуть свой собственный: Как преобразовать int в string в C?

Я использовал _itoa(. ) на компиляторе RedHat 6 и GCC. Это работает.

Замена на snprintf NOT завершена!

Он охватывает только базы: 2, 8, 10, 16, в то время как itoa работает для баз между 2 и 36.

Поскольку я искал замену для базы 32, я думаю, что мне придется кодировать свой собственный!

Вы можете использовать эту программу вместо sprintf.

Похожие вопросы:

Где находится функция ‘ main ‘? int main() < const char *str = hello world; printf(%sn, str); >Я знаю об этих местах: .text .data .bss stack heap Я думаю, что ответ .bss , потому что я знаю, что.

Ниже приведена часть моего кода. Я не уверен, что с ним не так, потому что когда я отлаживаю этот код, я получаю следующую ошибку: Необработанное исключение в 0x60e8144c (msvcr90d.dll) в.

Есть ли простой способ сделать следующее: Преобразовать байтовый массив, так как <1,3,0,2,4>в массив char так <'1','3','0','2','4'>или 13024 . Я могу сделать следующее ( Я думаю ), но это более.

Я хочу, чтобы моя функция ordenafile принимала candidatos.000-candidatos.068. По какой-то причине si[0] прослушивается, я думаю, потому что если я сделаю программу печатает si[0], она выйдет из.

Могу ли я использовать itoa() для преобразования long long int в двоичную строку? Я видел различные примеры преобразования int в двоичный код с использованием itoa . Есть ли риск переполнения или.

я хочу преобразовать int to char * в C без использования функции itoa() . Потому что в моих системах Linux функция i itoa отсутствует. я использую этот код, который я нашел здесь Я хочу запустить.

itoa не является стандартом ANSI-C, поэтому не работает для GCC char* itoa(int val, int base)< static char buf[32] = <0>; int i = 30; for(; val && i ; —i, val /= base) buf[i] =.

я хочу найти функцию ip_rcv() в моем linux, но я ищу cant.i ubuntu и fedora и centos, но я не могу найти этот function.but в http://lxr.free-electrons.com , дайте эти ссылки : ip_rcv Определяется.

Я попытался переписать функцию itoa() из упражнений K&R, но мне не удалось ее определить. Я вижу ответ функции в библиотеке, но я не могу понять, что находится внутри блока do. Пожалуйста.

Где функция itoa в Linux? — c

itoa() — действительно удобная функция для преобразования числа в строку. Linux, похоже, не имеет itoa() , есть ли эквивалентная функция или мне нужно использовать sprintf(str, «%d», num) ?

  • 7
  • 17
  • 12 окт 2019 2019-10-12 06:05:41
  • Adam Pierce

17 ответов

Вы можете использовать эту программу вместо sprintf.

  • 12 окт 2019 2019-10-12 06:05:45
  • Archana Chatterjee

Замена на snprintf НЕ завершена!

Он охватывает только базы: 2, 8, 10, 16, тогда как Итоа работает для баз от 2 до 36.

Так как я искал замену для базы 32, я думаю, мне придется написать свою собственную!

  • 12 окт 2019 2019-10-12 06:05:45
  • Zakhar

Я использовал _itoa (. ) в RedHat 6 и компиляторе GCC. Он работает.

  • 12 окт 2019 2019-10-12 06:05:44
  • m_pGladiator

внутренняя реализация glibc

glibc 2.28 имеет внутреннюю реализацию:

который используется в нескольких местах внутри, но я не мог найти, может ли это быть выставлено или как.

По крайней мере, это должна быть надежная реализация, если вы хотите извлечь ее.

Этот вопрос спрашивает, как выкинуть свой собственный: Как преобразовать int в строку в C?

  • 12 окт 2019 2019-10-12 06:05:44
  • Ciro Santilli 新疆改造中心 六四事件 法轮功

Чтение кода ребят, которые делают это для жизни, доставит вам ДЛИННУЮ ПУТЬ.

Посмотрите, как это сделали ребята из MySQL. Источник ОЧЕНЬ ХОРОШИЙ КОММЕНТАРИЙ и научит вас гораздо больше, чем взломанные решения, найденные повсеместно.

Я предоставляю упомянутую реализацию здесь; ссылка здесь для справки и должна использоваться для чтения полной реализации.

  • 12 окт 2019 2019-10-12 06:05:44
  • Vlatko Šurlan

Я попытался выполнить свою собственную реализацию itoa(), похоже, работает в двоичном, восьмеричном, десятичном и шестнадцатеричном

  • 12 окт 2019 2019-10-12 06:05:44
  • waaagh

Где находится функция itoa в Linux?

Поскольку itoa() не является стандартным в C, существуют различные версии с различными сигнатурами функций.
char *itoa(int value, char *str, int base); распространен в * nix.

Если он отсутствует в Linux или если код не хочет ограничивать переносимость, код может сделать его собственным.

Читать еще:  Торрент выдает ошибку write to disk

Ниже приведена версия, которая не имеет проблем с INT_MIN и обрабатывает проблемные буферы: NULL или недостаточный буфер возвращает NULL .

Ниже приведена версия C99 или более поздняя, которая обрабатывает любую базу [2. 36]

Для кода, совместимого с C89 и выше, замените внутренний цикл на

  • 12 окт 2019 2019-10-12 06:05:43
  • chux

прямая копия в буфер: 64-битное целое itoa hex:

note: изменить длину до долгого времени для 32-битной машины. long для int в случае для 32-битного целого. m — радиус. При уменьшении радиуса увеличивайте количество символов (переменная i). При увеличении радиуса уменьшите количество символов (лучше). В случае неподписанного типа данных я просто становлюсь 16 + 1.

  • 12 окт 2019 2019-10-12 06:05:43
  • the sudhakar

Если вы просто хотите их распечатать:

  • 12 окт 2019 2019-10-12 06:05:43
  • Andres Romero

Вот значительно улучшенная версия решения Archana. Он работает для любого radix 1-16, а числа

Где функция itoa в Linux?

В Linux такой функции нет. Вместо этого я использую этот код.

  • 12 окт 2019 2019-10-12 06:05:43
  • rick-rick-rick

Следующая функция выделяет достаточно памяти для хранения строкового представления заданного числа, а затем записывает строковое представление в эту область с помощью стандартного метода sprintf .

Не забывайте free выделить выделенную память, если она не нужна:

N.B. Поскольку snprintf копирует n-1 байты, мы должны вызывать snprintf (buf, len + 1, «% ld», n) (а не только snprintf (buf, len, «% ld», n))

  • 12 окт 2019 2019-10-12 06:05:42
  • mmdemirbas

Как писал Matt J, есть itoa , но это не стандартно. Ваш код будет более переносимым, если вы используете snprintf .

  • 12 окт 2019 2019-10-12 06:05:42
  • [email protected]

Изменить: Я только что узнал о std::to_string , который идентичен в моей собственной функции ниже. Он был введен в С++ 11 и доступен в последних версиях gcc, по крайней мере, уже в 4.5, если вы включите расширения С++ 0x.

Не только itoa отсутствует в gcc, это не самая удобная функция для использования, так как вам нужно кормить ее буфером. Мне нужно что-то, что можно было бы использовать в выражении, поэтому я придумал следующее:

Как правило, было бы безопаснее использовать snprintf вместо sprintf , но буфер тщательно подобран, чтобы быть неуязвимым для переполнения.

  • 12 окт 2019 2019-10-12 06:05:42
  • Mark Ransom

itoa не является стандартной функцией C. Вы можете реализовать свой собственный. Он появился в первом издании языка программирования C на языке Кернигана и Ритчи, на странице 60. Второе издание языка программирования C («K & R2») содержит следующую реализацию itoa , на странице 64. В книге отмечены некоторые проблемы, связанные с этим. реализация, в том числе тот факт, что он неправильно обрабатывает наиболее отрицательное число

Используемая выше функция reverse реализована двумя страницами ранее:

  • 12 окт 2019 2019-10-12 06:05:42
  • haccks

Если вы его много назовёте, совет «просто использовать snprintf» может быть раздражающим. Итак, вот что вы, вероятно, захотите:

  • 12 окт 2019 2019-10-12 06:05:42
  • James Antill

EDIT: Извините, я должен был помнить, что эта машина явно нестандартна, подключив различные нестандартные реализации libc для академических целей; -)

Поскольку itoa() действительно нестандартен, как упоминалось несколькими полезными комментаторами, лучше использовать sprintf(target_string,»%d»,source_int) или (еще лучше, потому что он безопасен от переполнения буфера) snprintf(target_string, size_of_target_string_in_bytes, «%d», source_int) . Я знаю, что это не совсем лаконично или круто, как itoa() , но по крайней мере вы можете писать один раз, запускать везде ™; -)

Здесь старый (отредактированный) ответ

Вы правы, указав, что по умолчанию gcc libc не включает itoa() , как и несколько других платформ, из-за которого технически не является частью стандарта. См. здесь для получения дополнительной информации. Обратите внимание, что вы должны

Конечно, вы уже это знаете, потому что вы хотели использовать itoa() в Linux после предположительного использования его на другой платформе, но. код (украденный из ссылки выше) будет выглядеть так:

Itoa (Си)

itoa (Си)

Функция itoa — широко распространенное нестандартное расширение стандартного языка программирования Си. Ее использование не предусматривает переносимости, поскольку эта функция не определена ни в одном стандарте языка Си; тем не менее, зачастую компиляторы поддерживают ее за счет использования заголовка , причем не совсем в удобном виде, так как она весьма близка по смыслу к стандартной библиотечной функции atoi .

void itoa(int input, char *buffer, int radix)

itoa принимает передаваемое целое число input и конвертирует его в число в основании корня radix . Полученное число (последовательность цифр основания radix ) записывается в буфер вывода buffer .

Аргумент radix определяет основание системы исчисления для input; его значение может лежать в пределах от 2 до 36.

Читать еще:  Astra linux net core

В зависимости от реализации, itoa может возвращать указатель на первый символ в буфере buffer , или может быть создана таким образом, чтобы передавать нуль- buffer , в результате чего функция возвращает длину строки, которая «будет» записана в корректный buffer .

Для преобразования числа в строку с основанием 8 (восьмеричная), 10 (десятичная) или 16 (шестнадцатеричная система счисления) альтернативой, совместимой со стандартом, является использование стандартной библиотечной функции sprintf .

Содержание

Реализация от Кернигана и Ричи

Функция itoa появилась в первом издании книги Брайана Кернигана и Дениса Ритчи Язык программирования Си, на странице 60. Второе издание Язык программирования Си («K&R2») на стра. 64 содержало нижеследующую реализацию itoa . В книге отмечено несколько воспросов, связанных с этой реализацией, включая тот факт, что она не в состоянии корректно обработать самое отрицательное число −2 длина машинного слова в битах-1 . [1]

Функция reverse реализована двумя страницами ранее:

Функция itoa (а также схожая с ней функция ftoa , конвертирующая числа с плавающей запятой в строку) указана в первой версии руководства по Unix. [2] В отличие от приведенных выше версий, библиотечная Unix-версия имела интерфейс, примерно похожий на

void itoa(int input, void (*subr)(char))

и вызывала подпрограмму обратного вызова subr для каждого символа в строке вывода, что устраняло необходимость в большом буфере для хранения сразу всей строки.

См. также

Примечания

  1. Решение этого вопроса смотри «K&R2 solutions» на сайте clc-wiki.net.
  2. «Unix Programmer’s Manual», 3 ноября 1971. Глава «Library routines».

Ссылки

  • string itoa(int n) — Функция C++ конвертации int в string (без утечек памяти!) (англ.)
  • How do I use itoa() with GCC? — реализации itoa() с тестами производительности (англ.)
  • lexical_cast — альтернатива для C++, часть библиотек boost (англ.)
  • modp_numtoa — альтернатива для C/C++ для преобразования целых и чисел с плавающей точкой в символы. (англ.)
  • Good old Integer To Ascii conversion: itoa — Еще одна достаточно быстрая реализация itoa для различных типов данных, плюс некоторая обертка в стиле boost в виде специализаций шаблона boost::lexical_cast (англ.) .
  • Описание itoa (рус.)

Wikimedia Foundation . 2010 .

Смотреть что такое «Itoa (Си)» в других словарях:

itoa (Си) — У этого термина существуют и другие значения, см. Itoa (значения). Функция itoa широко распространённое нестандартное расширение стандартного языка программирования Си. Ее использование не предусматривает переносимости, поскольку эта… … Википедия

Itoa — The itoa function is a widespread non standard extension to the standard C programming language. It cannot be portably used, as it is not defined in any of the C language standards; however, compilers often provide it through the header while in… … Wikipedia

Itoa — Itoa Clasificación cientí … Wikipedia Español

Itoa — … Википедия

ITOA — Information Technology Operations Analysis (Academic & Science » Universities) Information Technology Operations Analysis (Governmental » Military) Information Technology Operations Analysis (Business » General) … Abbreviations dictionary

Itoa (значения) — Itoa: Itoa научное название рода растений из семейства Ивовые (Salicaceae). itoa функция языка Си, не входящая в стандарт языка … Википедия

Итоа — Итоа … Википедия

Cyclone (programming language) — Cyclone Appeared in 2006 (2006) Designed by AT T Labs Stable release 1.0 (May 8, 2006; 5 years ago (2006 05 08)) Influenced by … Wikipedia

SNUSP — (un acronyme récursif signifiant SNUSP s Not Unix, but Structured PATH) est un langage de programmation exotique issu de la transformation du Brainfuck en un langage à deux dimensions, inspiré d un langage appelé PATH[réf. nécessaire]. Le… … Wikipédia en Français

Itoa linux c

Встречи и поздравления

Предложения встретиться, поздравления участников форума и обсуждение мест и поводов для встреч.

  • 1 января
  • Тему:С наступающим Новым 2020 Годом.
  • От:Stanislav
  • Ищу работу

    ищу работу, выполню заказ, нужны клиенты — все это сюда

    • 20 часов назад
    • Тему:Разработка электроники (Украина).
    • От:FLPPotapov
  • Предлагаю работу

    нужен постоянный работник, разовое предложение, совместные проекты, кто возьмется за работу, нужно сделать.

    • 3 часа назад
    • Тему:Помощь в поиске или разработке передающего устро…
    • От:Давид
  • Kуплю

    микросхему; устройство; то, что предложишь ты 🙂

    • среда в 17:03
    • Тему:Куплю ручной SMD манипулятор
    • От:Alt.F4
  • Продам

    есть что продать за деньги, пиво, даром ?
    Реклама товаров и сайтов также здесь.

    • вторник в 19:41
    • Тему:Продам Rohde & Schwarz cmu200
    • От:tillman
  • Объявления пользователей

    Тренинги, семинары, анонсы и прочие события

    • 4 часа назад
    • Тему:LDE/LHE – компактные ИП от Mornsun на печатную п…
    • От:КОМПЭЛ
  • Общение заказчиков и потребителей электронных разработок

    Обсуждение проектов, исполнителей и конкурсов

  • Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector
    ×
    ×