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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by KIR@PRO, 21 Feb 2009.

  1. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    Доброго времени суток!
    Прошу перевести эти две функции на дэлфи:

    Code:
    #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++ возможности перевести нет поэтому прошу помоч.
     
    _________________________
  2. criz

    criz Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    знаний по делфи у меня мало, хватило только на это:
    Code:
    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.	
    
    :)
     
    1 person likes this.
  3. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    к сожалению код неверен просьба все еще актуальна ;(
     
    _________________________
  4. stasoft

    stasoft Banned

    Joined:
    3 Feb 2009
    Messages:
    9
    Likes Received:
    5
    Reputations:
    2
    arKey++ попробуй исправить на inc(arKey)
     
    2 people like this.
  5. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    это понятно а вот где *arEnd непонятно как подно сложить char и longint непонятно ....

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

    SaiRus Elder - Старейшина

    Joined:
    24 Nov 2008
    Messages:
    369
    Likes Received:
    41
    Reputations:
    0
    KIR@PRO, а arKey это числовой набор в чаре?если да, то попробуй конвертировать форматы вместо long возми int или real...так честно не в курсе к сожалению :(
     
  7. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359


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