- 1
- 2
- 3
- 4
- 5
- 6
function bth(ds: byte): string;
const
b: string = '0123456789ABCDEF';
begin
Result:= b[(ds shr 4) + 1] + b[(ds and $F) + 1];
end;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+95
function bth(ds: byte): string;
const
b: string = '0123456789ABCDEF';
begin
Result:= b[(ds shr 4) + 1] + b[(ds and $F) + 1];
end;
Некоторое время назад потребовалось конвертить Byte в Hex. Стандартных способов не нашёл, а ничего лучше такой говнокодки выдумать не получилось. Сейчас смотрю и разбирает смех - весёлые были времена!
ctm 27.04.2012 06:11 # +1
если нужно очень быстро, то Result := '00'; а далее задавать оба символа как Result[1] := ....
bormand 27.04.2012 06:33 # 0
guest 27.04.2012 09:44 # 0
Но этот способ тоже вполне годный, у меня на С для PIC такая функция, т.к. на printf памяти не хватает.
Alegun 14.05.2012 16:22 # +1
Конечная сборка сократилась строк на 30 и это сильно радует :) Самому додуматься до очевидного использования IntToHex видно было несудьба, Вам ещё раз многократное, с эхом, спс за расширение кругозора!
TarasB 27.04.2012 11:40 # +2
const b: array [0..15] of char = '0123456789ABCDEF';
и тогда не надо прибавлять единицу
Нормальный конвертёр, говна не вижу. Интересного в коде тоже не вижу. Минус.
inkanus-gray 27.04.2012 12:02 # −1
rat4 27.04.2012 12:29 # +5
Я тут 5 магических констант насчитал.
inkanus-gray 27.04.2012 12:40 # +5
TarasB 27.04.2012 13:23 # +7
inkanus-gray 27.04.2012 13:43 # −1
Для четвёрки логичная замена такая: sizeof(Byte) shr ord(true).
False и true в свою очередь можно заменить произвольным выражением со сравнением.
TarasB 27.04.2012 13:24 # 0
Alegun 27.04.2012 13:36 # 0
TarasB 27.04.2012 13:45 # 0
Alegun 27.04.2012 13:57 # −3
inkanus-gray 27.04.2012 14:30 # +2
Техническое обоснование в студию.
> Если только PChar использовать.
PChar как раз и есть указатель. А массив от стринга отличается только отсутствием ячейки с длиной, которая в данном случае не нужна.
TarasB 27.04.2012 15:15 # +2
Какая нахуй куча, это константы.
> а для массива чарок создаётся и указатель и сами чарки
Тэээкс батенька, сишарпом давно болели?
Steve_Brown 27.04.2012 15:39 # 0
Alegun 27.04.2012 15:47 # −4
guest 27.04.2012 17:00 # 0
TarasB 27.04.2012 17:20 # +3
Alegun 27.04.2012 18:54 # 0
type
StrRec = record
allocSiz: Longint;
refCnt: Longint;
length: Longint;
end;
А это выдержка из ДРКБ:
Тип String: по смещению -4 храниться длина строки, по смещению -8 храниться счётчик ссылок на строку (когда он обнуляется строка уничтожается) Сама строка располагается в памяти как есть - каждая буква занимает 1 байт...
PChar - длина строки определяется от начала до #0 байта, по сути это чистой воды pointer, так что все действия по отслеживанию распределения памяти лежат на программисте - сами заботьтесь о том чтобы хватило места для распределения памяти и освобождении после использования. Тоже одна буква = 1 байт...
Самая хохма - в использовании данной функции, пример приведён выше, а это никто и не заметил.
lucidfoxGovno 27.04.2012 19:52 # 0
а твоя константа не в куче, а в .data
> храниться
DRKB такое DRKB
нубовская реализация неговна
Alegun 27.04.2012 20:56 # 0
guest 27.04.2012 21:00 # +4
Alegun 27.04.2012 21:10 # −3
lucidfoxGovno 27.04.2012 21:33 # 0
планетных систем рукава ориона
TarasB 27.04.2012 22:13 # +2
Да, как из этого блять следует, что массив чем-то экологически хуже, чем строка?
guest 27.04.2012 20:41 # +4
Alegun 27.04.2012 21:12 # 0
lucidfoxGovno 27.04.2012 21:33 # +2
TarasB 27.04.2012 22:14 # +2
Alegun 27.04.2012 22:59 # −3
inkanus-gray 27.04.2012 23:06 # 0
Alegun 27.04.2012 23:19 # −2
lucidfoxGovno 27.04.2012 23:29 # 0
inkanus-gray 28.04.2012 13:03 # 0
1. Отобразить integer на байтовый массив с помощью синтаксиса приведения типа и заполнить его поэлементно.
2. Привести каждый байт к integer, далее сдвиги влево и логическое ИЛИ.
Эти два варианта интересны тем, что не используют указатели.
inkanus-gray 27.04.2012 23:29 # 0
Alegun 27.04.2012 23:55 # 0