1. Си / Говнокод #24864

    −10

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    val = atoi(curstr);
    count = 0;
    while (val) {
                buf[count] = (val & 0x7f);
                val = val >> 7;
                count++;
    }

    Ноль не число.
    Отсюда:
    https://dxr.mozilla.org/mozilla-central/source/security/nss/cmd/oidcalc/oidcalc.c

    Запостил: PAAMAYIM_NEKUDOTAYIM, 05 Октября 2018

    Комментарии (16) RSS

    • SEO-пост.

      Метки: #atoi #ноль #c #то_ли_дело_php
      Ответить
    • То ли дело Forth:
      6.1.0570   >NUMBER                          "to-number"                               CORE
                        ( ud1 c-addr1 u1 -- ud2 c-addr2 u2 )
                        ud2 is the unsigned result of converting the characters within the
                        string specified by c-addr1 u1 into digits, using the number in BASE,
                        and adding each into ud1 after multiplying ud1 by the number in BASE.
      
                        Conversion continues left-to-right until a character that is not
                        convertible, including any "+" or "-", is encountered or the string is
                        entirely converted.  c-addr2 is the location of the first unconverted
                        character or the first character past the end of the string if the
                        string was entirely converted.  u2 is the number of unconverted
                        characters in the string.  An ambiguous condition exists if ud2
                        overflows during the conversion.
      
                   See: 3.2.1.2 Digit conversion.
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • В скобках записана стековая нотация, слева от "--" состояние стека до выполнения слова, справа –— после, вершина стека справа. ud –— беззнаковое целое размером 2 ячейки, c-addr — адрес, выровненный на границу символа, u —– беззнаковое целое одна ячейка.
          c-addr1 u1 –— определяет строку со счётчиком –— адрес начала и длина.
          ud2 –— ud1 + сконвертированное число, при конвертации используется база в переменной BASE, строка конвертируется слева-направо до неконвертируемого символа, включая "+" и "-" , c-addr2 —– адрес первого несконвертированного символа или адрес следующего символа после конца строки, u2 —– число несконвертированных символов.
          Пример:
          https://tio.run/##lYs9DoIwHMX3nuI5q0Rs7Ojk7AlMTG2KDAimLbuweB9jE6MEr/DviSroCZze731llXH5/JiNEqMyWjoN6wz4EiqXxkIWReXYGI1@Cp5CKqXP7jtTE7ZIflTVpYMySCx2CA111Ic2XOhB3QzhGlrqQbehGcjTkzzoTj3DuqxPB23A/vu@h0lDL/IxCiH2W843KV@xDw
          Ответить
    • а что тут не так?
      Ответить

    Добавить комментарий