- 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. Стандартных способов не нашёл, а ничего лучше такой говнокодки выдумать не получилось. Сейчас смотрю и разбирает смех - весёлые были времена!
если нужно очень быстро, то Result := '00'; а далее задавать оба символа как Result[1] := ....
Но этот способ тоже вполне годный, у меня на С для PIC такая функция, т.к. на printf памяти не хватает.
Конечная сборка сократилась строк на 30 и это сильно радует :) Самому додуматься до очевидного использования IntToHex видно было несудьба, Вам ещё раз многократное, с эхом, спс за расширение кругозора!
const b: array [0..15] of char = '0123456789ABCDEF';
и тогда не надо прибавлять единицу
Нормальный конвертёр, говна не вижу. Интересного в коде тоже не вижу. Минус.
Я тут 5 магических констант насчитал.
Для четвёрки логичная замена такая: sizeof(Byte) shr ord(true).
False и true в свою очередь можно заменить произвольным выражением со сравнением.
Техническое обоснование в студию.
> Если только PChar использовать.
PChar как раз и есть указатель. А массив от стринга отличается только отсутствием ячейки с длиной, которая в данном случае не нужна.
Какая нахуй куча, это константы.
> а для массива чарок создаётся и указатель и сами чарки
Тэээкс батенька, сишарпом давно болели?
type
StrRec = record
allocSiz: Longint;
refCnt: Longint;
length: Longint;
end;
А это выдержка из ДРКБ:
Тип String: по смещению -4 храниться длина строки, по смещению -8 храниться счётчик ссылок на строку (когда он обнуляется строка уничтожается) Сама строка располагается в памяти как есть - каждая буква занимает 1 байт...
PChar - длина строки определяется от начала до #0 байта, по сути это чистой воды pointer, так что все действия по отслеживанию распределения памяти лежат на программисте - сами заботьтесь о том чтобы хватило места для распределения памяти и освобождении после использования. Тоже одна буква = 1 байт...
Самая хохма - в использовании данной функции, пример приведён выше, а это никто и не заметил.
а твоя константа не в куче, а в .data
> храниться
DRKB такое DRKB
нубовская реализация неговна
планетных систем рукава ориона
Да, как из этого блять следует, что массив чем-то экологически хуже, чем строка?
1. Отобразить integer на байтовый массив с помощью синтаксиса приведения типа и заполнить его поэлементно.
2. Привести каждый байт к integer, далее сдвиги влево и логическое ИЛИ.
Эти два варианта интересны тем, что не используют указатели.