PDA

Просмотр полной версии : Конкурс на самый быстрый код!


LAV45
11.11.2010, 20:40
Есть функция
Function GetInt(const ss:string):integer;
var i:byte; tmp:string;
begin
for i := 1 to length(ss) do Insert(IntToHex(ord(ss[i]),2),tmp,i*2);
result := StrToInt('$'+tmp);
end;

//ss = 'cons' = #$63#0 #$6F#0 #$6E#0 #$73#0
//tmp = '636F6E73'
//result = $636F6E73


Реально ли через Move() написать ?

alexteam
11.11.2010, 20:49
Function GetInt(const str:string):integer;
var
Tmp: array[0..4] of byte absolute result;
begin
move(str[1],tmp[3],1);
move(str[2],tmp[2],1);
move(str[3],tmp[1],1);
move(str[4],tmp[0],1);
end;
естественно нужно учитывать что во входящей строке должно быть 4 байта (инт).

xkor
11.11.2010, 21:21
alexteam, типа сделал то что попросили?)
LAV45, вот так будет наиболее быстро и с проверками на размер строки:
function GetInt(const s: string): Integer;
var
r: array[0..3] of Char absolute Result;
i, c: Integer;
begin
Result := 0;
c := Length(s);
if c > 4 then c := 4;
for i := 4 - c to 3 do r[i] := s[4 - i];
end;

alexteam
11.11.2010, 21:31
точна, можно было "оф чар" сделать. и тупо присваивания, не вызывая функцию! :D

LAV45
11.11.2010, 21:59
точна, можно было "оф чар" сделать. и тупо присваивания, не вызывая функцию! :D
Это как ? ))
xkor, с проверкой на длину строки это я погорячился, да и парядок байт менять на обратный не обязательна.

Данная функция нужна для работы со спроками используя case
str := copy(s,idx,4);
case GetInt(str) of
......
end;

вариант с TStringList по моему как-то жирно тут выглядит
str := copy(s,idx,4);
case tag.IndexOf(str) of
......
end;

initialization
tag := TStringList.Create;
tag.CommaText := 'трам,пам ,пам';
finalization
tag.Free;

alexteam
11.11.2010, 22:29
это типо так.
Function GetInt(const str:string):integer;
var
Tmp: array[0..4] of char absolute result;
begin
tmp[3] := srt[1];
tmp[2] := srt[2];
tmp[1] := srt[3];
tmp[0] := srt[4];
end;

LAV45
11.11.2010, 22:59
Всем биг спс ))

ss то у нас #$63#0 #$6F#0 #$6E#0 #$73#0
если использывать Tmp: array[0..3] of char absolute result;
#0 остаются и на выходе получаем $63006F00

Вот так лучше будет
Function GetInt(const ss:string):integer;
var tmp: array[0..3] of byte absolute result;
begin
tmp[3] := ord(ss[1]);
tmp[2] := ord(ss[2]);
tmp[1] := ord(ss[3]);
tmp[0] := ord(ss[4]);
end;

alexteam
12.11.2010, 12:42
и чем оно отличаеццо ? :o

unknowned
12.11.2010, 19:40
и чем оно отличаеццо ? :o

Как думаешь, чем отличается в юникод системе char от байта ?

alexteam
12.11.2010, 19:59
интересно, где ты в коде нашел файдчар\вайдстринг, чтобы такие вопросы задавать.
на входе анси строка.

unknowned
12.11.2010, 20:19
интересно, где ты в коде нашел файдчар\вайдстринг, чтобы такие вопросы задавать.
на входе анси строка.

Я исходил из того, что использует топик стартер, глянь выше:

Всем биг спс ))
ss то у нас #$63#0 #$6F#0 #$6E#0 #$73#0
если использывать Tmp: array[0..3] of char absolute result;
#0 остаются и на выходе получаем $63006F00


Что то на ансистроку тут не похоже.

alexteam
12.11.2010, 20:40
а тут
GetInt(const ss:string)
очень даже похоже.

unknowned
12.11.2010, 21:15
а тут
GetInt(const ss:string)
очень даже похоже.

Совсем не похоже, string совсем даже не AnsiString.

ТруМамко
12.11.2010, 21:32
о самом главном умолчали... какой приз в конкурсе??

xkor
13.11.2010, 00:26
string совсем даже не AnsiStringдо дельфи 2009 именно AnsiString, а на неё и последующие ещё перешли не многие, так что без уточнений подразумеваются более старые версии...

LAV45
13.11.2010, 01:32
о самом главном умолчали... какой приз в конкурсе?? Респект и уважуха ))
до дельфи 2009 именно AnsiString, а ...
Не знал что это важно, но я действительно 2009 юзаю.

unknowned
13.11.2010, 06:19
Респект и уважуха ))

Не знал что это важно, но я действительно 2009 юзаю.

Я то это сразу понял, посмотрев на вот это:

Всем биг спс ))
ss то у нас #$63#0 #$6F#0 #$6E#0 #$73#0
если использывать Tmp: array[0..3] of char absolute result;
#0 остаются и на выходе получаем $63006F00


Другие, видимо, не такие проницательные :)

xkor
13.11.2010, 14:38
unknowned, другие не сочли нужным об этом докладывать...

alexteam
13.11.2010, 17:28
unknowned, http://i.piccy.info/i5/31/25/712531/Bezymiannyi.png
думаю теперь понятно почему я не вижу разницы между 2мя кусками кода.

unknowned
13.11.2010, 21:03
Конечно, то у автора там анси и мне втирали, а то вдруг все увидели юникод, о котором автор сразу дал намек, но никто не обратил внимание. Поздняк метаться :D

alexteam, при чем тут твои картинки мы говорим о авторском дельфях.

Лучше поставьте проверку на длину ss чтобы не было range error в ваших функциях.

LAV45
14.11.2010, 05:15
alexteam, говорят нет придела совершенству ))

Function GetInt(const ss: pointer):integer;
var tmp: array[0..3] of byte absolute result;
sm: array[0..7] of byte;
begin
^sm := ss; // - хз как тут правильно сделать
// используя чуть больше памяти мы ограничиваемся простым переносом
// байт из одного массива в другой
tmp[3] := sm[0];
tmp[2] := sm[2];
tmp[1] := sm[4];
tmp[0] := sm[6];
end;
..........
var ss: string;
begin
ss := 'iden';
case GetInt(pionter(copy(ss,1,4))) of
$6964656E:; // iden
end;
end;

xkor
14.11.2010, 15:19
LAV45, ты вроде говорил что порядок байт тебе не важен, тогда можно без доп функций:
var ss: AnsiString; // хз зачем тебе именно string тут нужен был
begin
ss := 'iden';
case PCardinal(@ss[1])^ of
$6E656469:; // iden
end;
end;

LAV45
14.11.2010, 22:36
xkor the best, ты хочешь сказать самая лудшая функция это её отсутствие )))))) "точняк"
биг спс.

А вообще пака редактировал эту функцию заметил что asm код абсолютно не менялся, по всей видимости мы с компиляторам нашли общий язык и ему что масла масленое, масленое масло, до фонаря.

Редактировать больше нечего, тему можно закрыть.

FrankJScott
14.06.2025, 16:44
To the guy asking about first bank and trust careers, bank & trust near me, us bank in florida, commercial banking products, best banks in lakeland florida, money companies, best investment banks, bank for good, capital bank and trust, first united banks, I highly recommend this best banks near me in Palm Beach FL info (https://championtechonline.xyz/2025/06/12/20-best-facts-for-picking-business-banking-administration-planning/) or best paying banks, first financial bank card services, western bank, united bank online, big us banks, customers bank headquarters address, best banks for minorities, business banking platform, banks in united states, community banks in florida, not forgetting sites such as this one-time offer about Cypress Bank & Trust Winter Haven forum (https://armchairlogistics.co.uk/20-top-ideas-for-deciding-on-business-trust-management-advice/) on top of best banks in austin texas, banking of the future, banks in the states, irrevocable trust checking account, the great bank, bank at peoples customer service, bank and trust near me, real estate bank account, best banks in jacksonville fl, capital loan bank, on top of this their explanation about Cypress Naples advice (https://vividverve.co.uk/20-handy-reasons-for-choosing-business-wealth-administration-advice/) which is also great. Also, have a look at this recommended Cypress Winter Haven details (https://neurosparkais.com/20-handy-suggestions-for-picking-business-portfolio-management-advice/) alongside all best way to bank, home loan and investment bank, cc lending, good national banks, usb bank account, top banks for customer service, best bank for personal use, best national bank to open checking account, best online bank reviews, river bank and trust online banking, together with this top bank near me in Jacksonville FL tips (https://thriveshive.com/20-free-reasons-for-choosing-business-wealth-administration-planning/) not to mention us trust bank, bank products investment, us bank phone number, trust card, florida banking, lowest price on (https://damiensoiy09876.plpwiki.com) alongside all texas bank and trust company, first online bank, customers bank fdic, people bank near me, first national bank and trust login, for good measure. Check more @ New What Is Trust Administration Info (http://www.akwaswiat.net/showthread.php?tid=13436&pid=368096#pid368096) b350c5b