Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-11-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Verificar cadena es Hexadecimal

Hola a todos,

estoy desarrollando una clase de calculo de CRC y necesito una ayudita.

Para calcular el CRC, solicito una cadena de longitud X, pero que hay que pasar en HEXadecimal.

Lo que necesito es una rutina, rápida, que chequee que todos los carácteres del string están en el rango Hexadecimal (0..9,A..F).

La cadena, puede ser de cualquier longitud. Y se trata de no "cargar" la clase con librerias externas, etc...

De momento, lo he hecho así:
Cita:
result := false, //error;
for x := 0 to (length(cadena)-1 do
if not TryStrToInt('$'Cadena[x],basura) then exit;
result := true; // ok.
Gracias.

Última edición por yapt fecha: 19-11-2009 a las 12:13:17.
Responder Con Cita
  #2  
Antiguo 19-11-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Puedes utilizar la función que viene con Delphi:
Código Delphi [-]
  function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer

Aunque no te haga falta esa conversión explícita, en la ayuda de esta función dice:

//------------------------------------------------------------------------
...
HexToBin returns the number of characters in Buffer that have not been used because Text did not contain valid hexadecimal characters ('0'..'f').
//------------------------------------------------------------------------
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 19-11-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
La nota de la ayuda, me frena de utilizar la función que me indicas, porque tendría que chequear previamente todos los carácteres o hacer una conversión a lowercase.
Cita:
Note: The hexadecimal number must use lower-case characters; HexToBind does not recognize upper-case characters.
De momento, creo que voy a mantener la forma de verificación que ya tengo. Gracias Neftalí...

Alguna idea más ?
Responder Con Cita
  #4  
Antiguo 19-11-2009
gerardus gerardus is offline
Miembro
 
Registrado: dic 2007
Posts: 43
Poder: 0
gerardus Va por buen camino
Hola,

En Delphi, las cadenas de caracteres empiezan con un indice de uno.
En vez de

Código:
for x := 0 to (length(cadena)-1 do
Tendrias que usar

Código:
for x := 1 to length(cadena) do
Si funciona tal como está, es por suerte, y dejas de comprobar el ultimo caracter.

Esta és aún más rápida (Te ahoras las conversiones de TryStrToInt):

Código:
  
  Result := false;
  for x := 1 to length(cadena) do
    if not (Cadena[x] in ['0'..'9','a'..'f','A'..'F']) then exit;
  result := true;
Cordialmente,

Gerard.

Última edición por gerardus fecha: 19-11-2009 a las 13:38:58.
Responder Con Cita
  #5  
Antiguo 19-11-2009
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
El código no estaba probado todavía. Un despiste. Gracias gerardus.

Me gusta más tu código. Lo cambio.

Muchas gracias de nuevo y un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Convertir cadena aleatoria en cadena de N caracteres DANY OOP 3 12-03-2009 20:49:21
Funcion para borrar la cadena que aparesca repetida dentro de otra cadena flystar Varios 1 02-07-2007 23:51:10
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 22:48:08
convertir cadena hexadecimal a imagen Barzaugc SQL 3 20-09-2006 16:06:44
Verificar si el valor introducido en un edit1.text es un numero o una cadena ctronx Varios 6 26-06-2004 03:14:18


La franja horaria es GMT +2. Ahora son las 21:15:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi