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

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    #include <conio.h>
    
    static unsigned char bigArray[256] = {['0'] = 0, ['1'] = 1, ['2'] = 2, ['3'] = 3,
                                          ['4'] = 4, ['5'] = 5, ['6'] = 6, ['7'] = 7,
                                          ['8'] = 8, ['9'] = 9, ['A'] = 10, ['B'] = 11,
                                          ['C'] = 12, ['D'] = 13, ['E'] = 14, ['F'] = 15 };
    void StringToByte(const char src[], unsigned char dst[]) 
    {
    	int q, u = 0;
    	for (q = 0; src[q]; q+=2) 
    	{
    		dst[u] = bigArray[src[q]] << 4;
    		if (!src[q+1]) 
    			return;
    		dst[u++] |= bigArray[src[q+1]];
    	}
    }
    
    int main()
    {
    	char string[] = "112255ACBF";
    	unsigned char bytes[5];
    	StringToByte(string, bytes);
    	int i;
    	for (i = 0; i!=sizeof(bytes); i++)
    		printf("%x ", (int)bytes[i]);
    	return 0;
    }

    Ебическая С-ла.

    Запостил: Psionic, 13 Мая 2019

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

    • Для пирфоманса табличку надо было на 65536 брать. И с нижним регистром буквы добавить.
      Ответить
      • Я просто оставлю это здесь: http://govnokod.ru/12822
        Ответить
      • В оригинале нижний регистр был - сей ГК не копипаст, но идейное наследие от того кода.
        Ответить
      • Судя по прошлому треду, вариант с 65к табличкой был где-то раза в 2 быстрее, чем с табличкой на 256.

        Но могут быть проблемы с кучей миссов в L1 если прога не только хексы парсит, а ещё чем-то при этом занимается...
        Ответить
        • З.Ы. Хотя за L1 я, наверное, зря боюсь. Горячая часть таблички очень маленькая, а остальная юзается только при кривых данных. На вскидку где-то 32 кешлайна зацепит всего из 1024 потенциальных. Ну раза в 4 больше если буквы в смешанном регистре.
          Ответить
        • Это с какого перепугу он будет быстрее? Разве организация памяти и адресная арифметика зависят от объема массива?
          Ответить
          • Попадание в кеш зависит
            Ответить
            • Насколько целесообразно стараться попасть в кэш в многозадачной среде?
              Ответить
              • Думается что время на работу одной задачи настолько огромно (с точки зрения ЦПУ) что остальные задачи не успевают помешать

                Кстати
                https://www.freebsd.org/doc/en_US.ISO8859-1/articles/vm-design/page-coloring-optimizations.html
                Ответить
                • In ancient times (i.e. 10+ years ago) processor caches tended to map virtual memory rather than physical memory. This led to a huge number of problems including having to clear the cache on every context switch in some cases, and problems with data aliasing in the cache. Modern processor caches map physical memory precisely to solve those problems.

                  О, боже! Расскажите ещё о проблемах процессоров.
                  Ответить
                  • Жалкие процессоры!
                    Их работа с кешем лишь забавляет меня
                    Ответить
                    • Кэш не нужен. Нужна быстрая оперативка.
                      Ответить
                      • Жалкие инженеры! Их попытки решить проблему бутылочного горлышка лишь забавляют меня! В моём больном воображении у процессоров > 60 млрд. регистров, и никакие кеши не нужны!
                        Ответить
                        • А как код писать? К регистрам можно обращаться по номеру?
                          Ответить
                          • В восьмибитных AVR регистры вообще на адреса памяти отображены, и их можно в теории (да и на практике) читать как массивчик.
                            http://ww1.microchip.com/downloads/en/devicedoc/atmel-8154-8-bit-avr-atmega16a_datasheet.pdf

                            страница 11
                            > As shown in Figure 6-2, each register is also assigned a data memory address, mapping them directly into the first 32 locations of the user Data Space. Although not being physically implemented as SRAM locations, this memory organization provides great flexibility in access of the registers, as the X-, Y-, and Z-pointer Registers can be set to index any register in the file.

                            https://superuser.com/a/695508
                            > "Memory-mapped registers" can mean several things. One would be the above example of the disk drive controller with memory-mapped control registers. Another, entirely different case would be a processor that actually has its registers in RAM. This was fairly common with early (50s through early 70s) processors, since it reduced parts count considerably, and it also permitted some "clever" programming practices. In a few cases the processor was available in two models, one with memory-mapped registers and the other with (faster) "hardware" registers.
                            Т.е. в древних архитектурах это было довольно распространенное явление, что регистры тупо были в адресном пространстве
                            Ответить
                      • быстрая оперативка не нужна.
                        Нужен быстрый SSD
                        Ответить
              • Поэтому я за "четверг".
                Ответить
          • > с какого перепугу
            По джва байта одновременно парсит. Тупо инструкций меньше. А процу что 1 байт читать, что 8 - вообще похуй.
            Ответить
            • > по джва байта
              По джва символа в один байт конечно же.
              Ответить
              • Зависит от бутербродера. Непереносимо.
                Ответить
                • Да, два символа в один байт –— это невыносимо!
                  Ответить
            • А, то есть не по первому и второму шестинадцатиричному разряду, а сразу парами и в массиве также.
              Ответить
    • > ['0'] = 0

      Ого, не знал что так можно.
      Это как в "PHP" => ?
      Ответить
      • Ещё есть для структур .len = 20, а в анскильных крестах такого нет.

        Ничтожества! Их проблемы лишь забавляют меня!
        Ответить
        • Есть https://en.cppreference.com/w/cpp/language/aggregate_initialization
          Ответить
          • (since C++20)

            Я джва года этого ждал!
            Ответить
            • Как осчастливить крестоблядь - нужно забрать из крестов фичу, а потом её добавить.
              Ответить
          • Оно только для структур.
            struct A { int x, y; };
            struct B { struct A a; };
            struct A a = {.y = 1, .x = 2}; // valid C, invalid C++ (out of order)
            int arr[3] = {[1] = 5};        // valid C, invalid C++ (array)
            struct B b = {.a.x = 0};       // valid C, invalid C++ (nested)
            struct A a = {.x = 1, 2};      // valid C, invalid C++ (mixed)
            (since C++20)
            Ахаха, ничтожества! Ваши инициализаторы лишь забавляют меня!

            То ли дело "JavaScript":
            let a = {"length": 100500, 1: "a", 2: "b", 3: "c"};
            Ответить
            • > let a = {"length": 100500, 1: "a", 2: "b", 3: "c"};
              Фи, как вербозно, то ли дело «Python»:
              a = {"length": 100500, 1: "a", 2: "b", 3: "c"}
              Ответить
              • a.length;
                a[1];
                Ответить
              • То ли дело "lua":

                a = {length=100500, "a", "b", "c"}
                Ответить
                • угадаешь без мануала чему равна длина (#a) в твоем случае?
                  Ответить
                  • Я вчера как раз мануал читал, к сожалению. Получится 3 т.к. строки и флоаты в ключах длину не инкрементят.
                    Ответить
                    • Ты чисто случайно вчера читал мануал по луа? Тебя что, золотой хуй укусил?
                      Ответить
                    • Использование ключа превращает таблицу из обычного массива в хуйпоймичо, и да: получение длины больше нормально не работает.
                      Ответить
                      • Там же таблица состоит из массива (для подряд идущих интов начиная с единицы) и хешмапы (для остального)?

                        Ну и # возвращает длину именно массива. Т.е. даже если числа не по порядку вставлять - уже длину распидорасит.
                        Ответить
            • А что такое let? Это что-то из «ES6»? Чем оно отличается от var?
              Ответить
              • {let y = 4}
                console.log(y) \\Reference error
                {var y = 4}
                console.log(y) \\ 4

                {...expression}
                Это новая (ES6 maybe) фича блочного пространства имен. Раньше делали так:
                (function(){...expression})()

                Более того
                (function(){var y = 4})()
                console.log(y) \\ Reference error

                В этом и заключается главное отличие let от var - let определена только в ближайшем блоке, а var - в функции.
                Ответить
                • А "var" задепрекейтят, или оно останется, как баребуха?
                  Ответить
                  • останется конечно

                    больше неконсистентного говна богу неконсистентного говна
                    Ответить
                    • Богу обратной совместимости.
                      Ответить
                      • А я что написал?

                        Питонисты имели яйца и потому обосцали и сожгли древнее ненужное говно.
                        У остальных яиц нет
                        Ответить
                        • > обосцали и сожгли
                          Вот, попутали порядок, теперь сжечь до конца не могут.
                          Ответить
                          • сожжение назначено на 2020.

                            правда конечно есть всякие говны типа centos/rh в которых некрофилы будут теребонькать чуть-ли не 2.6 еще лет пять
                            Ответить
                            • В 2020 просто поддержка пропадёт. Сколько там лет после этого XP прожила?
                              Ответить
                              • Смотря где.

                                У сём живет до сих пор, в серьезных конторах за 2-3 года закончилась. Закончилась бы и раньше, но вистой нельзя же было пользоваться.
                                Ответить
                        • > У остальных яиц нет
                          Например начиная с C99 убрали неявный int и сделали обязательным ретурн в не-void функциях. Но всем, как известно, похуй.
                          Ответить
                          • gcc и vc похуй действительно. И верно шлангу тоже

                            я просто пишу

                            int foo(){}
                            
                            main() {
                            foo();
                            }

                            и теку.

                            Там варнинг какой=то, но мне поъуй
                            Ответить
                            • > vc
                              Разве там есть поддержка C99?
                              Ответить
                              • и правда нету. Там c89 только. Дальше надописать на ++ и течь

                                Я как-то поел говна пытаясь там VLA
                                Ответить
                                • Ничтожество! Твои проблемы лишь забавляют меня!
                                  Ответить
                        • Питонисты - долбоебы.
                          Ответить
                • Классы вместо прототипов завезли. Скоупы завезли. Осталось типизацию прикрутить...
                  Ответить
                  • стрелочную функцию завезли (которая не насилует this), модули завезли даже.
                    Да, осталась статическая типизация.
                    Ответить
                  • А вот в ActionScript3 была типизация.
                    Ответить
                    • Типизация была в проекте ES4 (черновик опубликован в 2007-м году), который сожгли и обоссали, потому что решили, что в вебе типизация не нужна. Вроде даже какая-то из древних версий Фуррифокса этот стандарт поддерживала.

                      Верните мне мой 2007-й.
                      Ответить
                      • В 2007-м еще колыхались в вебпараше зайчатки разума: xhtml, wsdl, схемы, xpath, xquery, soap, xsl, стат типизация, о потом пришла радость молодая невозможная, и кругом настал нетипизированный пиздец.

                        А разгадка одна: когда ты пишешь в саблайм тебе пофиг на типы
                        Ответить
    • Ну, единственное говно здесь в том, что строка не проверяется. Передашь "govno" и получай сегфолт.
      Ответить
      • Сорян, не заметил, что массив на 256 символов.

        Но строку всё равно надо проверять.
        Ответить
        • Зачем? Garbage in - garbage out.
          Ответить
          • Но можно было бы хотя бы код ошибки возвращать.
            Ответить
            • Пирфоманс упадёт.
              Ответить
              • Ну раз уже упал, пусть и яйца к брусчатке приколотит - перфоманс же.
                Ответить
                • Почему сайт презика никогда не падает? За него молится патриархз?
                  Ответить
                  • На него никто не заходит, вот он и не падает.

                    Если у вас нету дома,
                    Пожары ему не страшны,
                    И жена не уйдёт к другому,
                    Если у вас нет жены.
                    Ответить
                  • Это что порнохаб или иксхомяк чтоб падать? Толпы страждущих туда не ходят, гектаров траффика не гоняет, от чего ему падать?
                    Ответить
    • больше не пользуюсь IBM PC compatible компьютерами после того как узнал
      https://www.huffpost.com/entry/ibm-holocaust_b_1301691
      Ответить
      • Ghostery предотвратил переадресацию с 
        guce.huffpost.com на guce.advertising.com, 
        , которая является частью Advertising.com. 
        
        Этот тег появляется для переадресации на 
        https://guce.advertising.com/collectIdentifiers?sessionId=3_cc-session_518ac5e3-11d0-pituh-pituh-3de5b8cd6138
        Если ссылка выглядит правильно и вы хотите продолжить,
        нажмите на значок ниже, чтобы разрешить Advertising.com и выполнить перезагрузку.


        Какой багор )))
        Ответить
        • > перезагрузку
          Компьютера?
          Ответить
          • Установка сайта завершена, для продолжения перезагрузите компьютер.
            Ответить
          • У Abyssmedia была прога, позволяющая сцомпилировать сайт в *.exe
            Требовалось указать путь к папке с сайтом, на выходе имели бинарь.

            На делфях, кстати, писанная.
            Ответить
        • https://coub.com/view/bgkvn
          Ответить
          • отгадай загадку
            Жили были два петуха, одного ебли до обеда, а другого после обеда, кому было хуже?
            Ответить
            • А после обеда-то кого ебать? От петуха же одни косточки остались. У! У-у а аа!
              Ответить
    • Как меня багорит с конио )))
      Ответить
      • лсушай, а ыведь да

        это что-то из моего броландсишнего детства
        Ответить
        • Эй, ты интересный парнишка ))) Не желаешь войти в меня сзади?
          Ответить

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