PDA

Просмотр полной версии : Необходима помощь в переводе с C++ на Delphi двух функций


KIR@PRO
21.02.2009, 23:50
Доброго времени суток!
Прошу перевести эти две функции на дэлфи:


#include <stdio.h>
#include <string.h>


//раз функция
static inline long hash_1(char *arKey, int nKeyLength)
{
long h = 5381;
char *arEnd = arKey + nKeyLength;

while (arKey < arEnd) {
h += (h << 5);
h += (long) *arKey++;
}
return h;
}

//два функция
static inline long hash_2(char *arKey, int nKeyLength)
{
long h = 5381;
char *arEnd = arKey + nKeyLength;

while (arKey < arEnd) {
h += (h << 5);
h ^= (long) *arKey++;
}
return h;
}


//это ненадо это я понимаю)
int main()
{
char *chr = "GALLERY_BASEDIR";
int len = strlen(chr)+1;
printf("%ld\n", hash_php5(chr, len));
printf("%ld\n", hash_php4(chr, len));
}

ввиду моих плохих знаний в C++ возможности перевести нет поэтому прошу помоч.

criz
22.02.2009, 11:40
знаний по делфи у меня мало, хватило только на это:

function hash_1(var arKey:Pointer, nKeyLength:integer) : LongInt;
var h: longint;
arEnd: Pointer;
begin
h:=5831;
@arEnd := arKey + nKeyLength;
while(arKey < arEnd) do
begin
h:= h + (h Shl 5);
h:= @arKey++;
end;
result:=h;
end.


function hash_2(var arKey:Pointer, nKeyLength:integer) : LongInt;
var h: longint;
arEnd: Pointer;
begin
h:=5831;
@arEnd := arKey + nKeyLength;
while(arKey < arEnd) do
begin
h: = h + (h Shl 5);
h: = h Xor @arKey++;
end;
result:=h;
end.

:)

KIR@PRO
22.02.2009, 13:39
к сожалению код неверен просьба все еще актуальна ;(

stasoft
23.02.2009, 03:51
arKey++ попробуй исправить на inc(arKey)

KIR@PRO
23.02.2009, 13:59
arKey++ попробуй исправить на inc(arKey)
это понятно а вот где *arEnd непонятно как подно сложить char и longint непонятно ....

неужели нет людей которые знают практически одинаково и delphi и c++??? если есть отзовитесь)

SaiRus
24.02.2009, 02:48
KIR@PRO, а arKey это числовой набор в чаре?если да, то попробуй конвертировать форматы вместо long возми int или real...так честно не в курсе к сожалению :(

KIR@PRO
24.02.2009, 10:29
KIR@PRO, а arKey это числовой набор в чаре?если да, то попробуй конвертировать форматы вместо long возми int или real...так честно не в курсе к сожалению :(



нет там текст на входе это как MD5 хэширование тока проще.....