Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Владимиру Кладову...   Найти похожие ветки 

 
Dimaxx ©   (2003-07-31 23:30) [0]

Сейчас столкнулся с проблемой ассемблерных функций Trim. Ни одна не работает, если строка символов окружена не пробелами, а нулевыми символами. Возвращает пустую строку. Паскалевская работает на "ура", а ассемблерная - нет. Не мешает поправить бы... ;-)


 
miek ©   (2003-08-01 08:49) [1]

И это не только для Trim, кстати говоря. А дело в том, что в них используется код для ASCIIZ-строк.


 
Gandalf ©   (2003-08-04 14:14) [2]

StrReplace не пашет если дать ей пустую строку - вылетает.
Можно добавить в Int2Hex - Си формат (0x...) - добавить проверку на ворой знак и смещать индекс на 2 (ведь проверка на $ есть) - мне бонадобилось.
Может ввести функцию Int2Oct?

Код исправленый Int2Hex и Int2Oct - могу выслать.


 
Кладов   (2003-08-04 19:40) [3]

Может, все-таки Hex2Int, Int2Hex ничего не должен анализировать, у него на входе число. Hex2Int лучше не трогать. Можно сделать cHex2Int, который еще и на ведущий 0x проанализирует. Насчет Trim"а я тоже не согласен. Во многих случаях хватает trim"а для asciz, а не для asciz можно использовать альтернативный или по-другому названный. Я против изменения функциональности существующих функций и методов, если это не исправление ошибки. Могу согласиться, если изменение не увеличивает размер кода, и не нужно после этого вносить изменения в тех проектах, где эти функции/методы были использованы.


 
Dimaxx ©   (2003-08-04 23:27) [4]

А как тогда обрезать нулевые символы в строке, если ничего не править? Вот тут-то и добавляем свой лишний код. 8-( Так какая разница - в KOL добавить или каждый будет городить свои версии замены нулей на пробелы, а потом их триммингование? А так была бы полная функциональность. И добавлять ничего не пришлось бы.
Иначе к переносу с VCL на KOL будет добавлено самостоятельное исправление таких вот мелких неприятностей. ;-) Сначала это, потом другое обнаружится...

PS: В ассемблерной части добавить-то всего-ничего: дополнительную команду сравнения. :-)


 
Gandalf ©   (2003-08-05 09:31) [5]

> Может, все-таки 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?)



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
7-1076167977
Ландграф Павел
2004-02-07 18:32
2004.04.11
Как добавить кнопочку в системное меню программы


3-1081934475
human
2004-04-14 13:21
2004.04.11
Direct Oracle Access


6-1079540581
Kondryuk
2004-03-17 19:23
2004.04.11
Сокеты...


14-1082352021
Романов Р.В.
2004-04-19 09:20
2004.04.11
Support и его уровень


14-1081865688
Артем
2004-04-13 18:14
2004.04.11
Inno Setup RUS