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

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

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

        Но могут быть проблемы с кучей миссов в L1 если прога не только хексы парсит, а ещё чем-то при этом занимается...
        Ответить
        • З.Ы. Хотя за L1 я, наверное, зря боюсь. Горячая часть таблички очень маленькая, а остальная юзается только при кривых данных. На вскидку где-то 32 кешлайна зацепит всего из 1024 потенциальных. Ну раза в 4 больше если буквы в смешанном регистре.
          Ответить
        • Это с какого перепугу он будет быстрее? Разве организация памяти и адресная арифметика зависят от объема массива?
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Насколько целесообразно стараться попасть в кэш в многозадачной среде?
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • 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.

                  О, боже! Расскажите ещё о проблемах процессоров.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Кэш не нужен. Нужна быстрая оперативка.
                      Ответить
                      • Жалкие инженеры! Их попытки решить проблему бутылочного горлышка лишь забавляют меня! В моём больном воображении у процессоров > 60 млрд. регистров, и никакие кеши не нужны!
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • В восьмибитных 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.
                            Т.е. в древних архитектурах это было довольно распространенное явление, что регистры тупо были в адресном пространстве
                            Ответить
                      • показать все, что скрытоvanished
                        Ответить
              • показать все, что скрытоvanished
                Ответить
          • > с какого перепугу
            По джва байта одновременно парсит. Тупо инструкций меньше. А процу что 1 байт читать, что 8 - вообще похуй.
            Ответить
            • > по джва байта
              По джва символа в один байт конечно же.
              Ответить
              • Зависит от бутербродера. Непереносимо.
                Ответить
                • Да, два символа в один байт –— это невыносимо!
                  Ответить
            • А, то есть не по первому и второму шестинадцатиричному разряду, а сразу парами и в массиве также.
              Ответить
    • > ['0'] = 0

      Ого, не знал что так можно.
      Это как в "PHP" => ?
      Ответить
    • Ну, единственное говно здесь в том, что строка не проверяется. Передашь "govno" и получай сегфолт.
      Ответить
      • Сорян, не заметил, что массив на 256 символов.

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

                    Если у вас нету дома,
                    Пожары ему не страшны,
                    И жена не уйдёт к другому,
                    Если у вас нет жены.
                    Ответить
                  • Это что порнохаб или иксхомяк чтоб падать? Толпы страждущих туда не ходят, гектаров траффика не гоняет, от чего ему падать?
                    Ответить
    • показать все, что скрытоvanished
      Ответить
      • 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 и выполнить перезагрузку.


        Какой багор )))
        Ответить
    • показать все, что скрытоvanished
      Ответить

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