diciembre 14, 2005

Una cadena = Un número único

Esta función me pareció tres cosas: útil, interesante y sencilla

type
  UInt64 = 0..9223372036854775807;

  function Unc (s: string): UInt64;
  var
    x: integer;
  begin
    Result := 0;
    for x := 1 to Length (s) do
    begin
      Result := Result + ((Ord (s[x])) shl ((x - 1) * 8));
    end;
  end;

La lógica detrás de la función no es complicada, si bien si muy práctica y útil en varios casos cuando al manejar elementos en memoria interesa obtener identificadores únicos por alguna serie de textos ( me he encontrado con casos así al trabajar con sistemas de redes o árboles). Un inconveniente es que los números que se obtienen por esta función son muchas veces números muy grandes (de hasta 64 bits) por lo que la aplicación en una BD como Firebird por ejemplo resulta un tanto complicada; pero bueno no es tan fácil tenerlo todo siempre.

No hay comentarios.:

Publicar un comentario