![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Владимиру Кладову...
Dimaxx © (2003-07-31 23:30:00)Сейчас столкнулся с проблемой ассемблерных функций Trim. Ни одна не работает, если строка символов окружена не пробелами, а нулевыми символами. Возвращает пустую строку. Паскалевская работает на "ура", а ассемблерная - нет. Не мешает поправить бы... ;-)
Gandalf (2003-08-05 09:31:00) [1]> Может, все-таки Hex2Int, Int2Hex ничего не должен анализировать,
> у него на входе число. Hex2Int лучше не трогать.
Да конечно, соответсвенно Oct2Int - можно и Bin2Int - он мне лично не нужен но они настолько легко клепаются из Hex2Int что грех не сделать.
function Hex2Int( const Value : String) : Integer;
var I : Integer;
begin
Result := 0;
I := 1;
if Value = '' then Exit;
if Value[ 1 ] = '$' then Inc( I );
// C form support
if Value[ 2 ] = 'x' then I:=3;
while I <= Length( Value ) do
begin
if Value[ I ] in [ '0'..'9' ] then
Result := (Result shl 4) or (Ord(Value[I]) - Ord('0'))
else
if Value[ I ] in [ 'A'..'F' ] then
Result := (Result shl 4) or (Ord(Value[I]) - Ord('A') + 10)
else
if Value[ I ] in [ 'a'..'f' ] then
Result := (Result shl 4) or (Ord(Value[I]) - Ord('a') + 10)
else
break;
Inc( I );
end;
end;
function Oct2Int( const Value : String) : Integer;
var I : Integer;
begin
Result := 0;
I := 1;
if Value = '' then Exit;
while I <= Length( Value ) do
begin
if Value[ I ] in [ '0'..'8' ] then
Result := (Result shl 3) or (Ord(Value[I]) - Ord('0'))
else
break;
Inc( I );
end;
end;
function Bin2Int( const Value : String) : Integer;
var I : Integer;
begin
Result := 0;
I := 1;
if Value = '' then Exit;
while I <= Length( Value ) do
begin
if Value[ I ] in [ '0'..'1' ] then
Result := (Result shl 1) or (Ord(Value[I]) - Ord('0'))
else
break;
Inc( I );
end;
end;
Насчет StrReplace - пардон, теперь не могу добится эффекта вылетания, видимо померещилось. (Или дело было в Parse?)
Dimaxx (2003-08-04 23:27:00) [2]А как тогда обрезать нулевые символы в строке, если ничего не править? Вот тут-то и добавляем свой лишний код. 8-( Так какая разница - в KOL добавить или каждый будет городить свои версии замены нулей на пробелы, а потом их триммингование? А так была бы полная функциональность. И добавлять ничего не пришлось бы.
Иначе к переносу с VCL на KOL будет добавлено самостоятельное исправление таких вот мелких неприятностей. ;-) Сначала это, потом другое обнаружится...
PS: В ассемблерной части добавить-то всего-ничего: дополнительную команду сравнения. :-)
Кладов (2003-08-04 19:40:00) [3]Может, все-таки Hex2Int, Int2Hex ничего не должен анализировать, у него на входе число. Hex2Int лучше не трогать. Можно сделать cHex2Int, который еще и на ведущий 0x проанализирует. Насчет Trim'а я тоже не согласен. Во многих случаях хватает trim'а для asciz, а не для asciz можно использовать альтернативный или по-другому названный. Я против изменения функциональности существующих функций и методов, если это не исправление ошибки. Могу согласиться, если изменение не увеличивает размер кода, и не нужно после этого вносить изменения в тех проектах, где эти функции/методы были использованы.
Gandalf (2003-08-04 14:14:00) [4]StrReplace не пашет если дать ей пустую строку - вылетает.
Можно добавить в Int2Hex - Си формат (0x...) - добавить проверку на ворой знак и смещать индекс на 2 (ведь проверка на $ есть) - мне бонадобилось.
Может ввести функцию Int2Oct?
Код исправленый Int2Hex и Int2Oct - могу выслать.
miek (2003-08-01 08:49:00) [5]И это не только для Trim, кстати говоря. А дело в том, что в них используется код для ASCIIZ-строк.