Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2011
Lizeth Lizeth is offline
Miembro
 
Registrado: Aug 2005
Ubicación: Mexico D.F
Posts: 50
Poder: 14
Lizeth Va por buen camino
Red face convertir hex a Byte

Hola espero me puedan ayudar. Tengo una cadena en hexadecimal así:
Value = 0:10:8:0:E0:6:0:0:2:10:8:0:4:0:0:0 (supongamos)

Quiero extraer cada elemento y convertirlo a byte.
Se que debo primero saber el Length(Value) que es variable, luego el pos de cada ":" y hacer un for que solo me tome los valores entre cada ":" y luego convertir ese valor ejem "E0" a byte. y al final meterlo en un array of bytes.

Pero solo tengo la idea no se como hacerlo.

Gracias
Responder Con Cita
  #2  
Antiguo 06-04-2011
Keiso Keiso is offline
Miembro
 
Registrado: Aug 2004
Ubicación: Bolivia
Posts: 20
Poder: 0
Keiso Va por buen camino
Para la primera parte podría servirte este procedimiento:
Código Delphi [-]
procedure CommaTextToStrs( AStrs: TStrings;const Value: string ;const AchDelim : Char );
var
 P, P1     : PChar;
 S         : string;
 chDelim   : char ;
begin
 chDelim := AchDelim ;
 AStrs.BeginUpdate;
 try
  AStrs.Clear;
  P := PChar(Value);
  while P^ in [#1..' '] do
   P := CharNext(P);
  while P^ <> #0 do
   begin
    if ( P^ = '"' ) then
     S := AnsiExtractQuotedStr(P, '"')
    else
     begin
      P1 := P;
      while (P^ > ' ') and ( P^ <> chDelim ) do
       P := CharNext(P);
      SetString(S, P1, P - P1);
     end;
    AStrs.Add(S);
    while P^ in [#1..' '] do
     P := CharNext(P);
    if P^ = chDelim then 
     repeat
      P := CharNext(P);
     until not (P^ in [#1..' ']);
    end;  // while
  finally
   AStrs.EndUpdate;
  end;
end;

Su uso sería el como sigue:
Código Delphi [-]
var
Strs1: TStringList; // Donde estarán guardados tus HEX individuales
inStr: String;        // Tus HEX agrupados 0:10:8:0:E0:6:0:0:2:10:8:0:4:0:0:0

CommaTextToStrs( Strs1, inStr, ':' );
para lo segundo, supongo que con byte te refieres en decimales, esto es lo primero que encontré:

http://www.greatis.com/delphicb/tips...s-hex2dec.html

o para cambiar entre cualquier base este es un buen componente:

http://wenwen.soso.com/z/q156828058.htm

Última edición por ecfisa fecha: 06-04-2011 a las 04:11:18. Razón: ETIQUETAS: [DELPHI] [/DELPHI]
Responder Con Cita
  #3  
Antiguo 06-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.083
Poder: 29
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lizeth.

Código Delphi [-]
...
type
  TArrayOfByte= array of Byte;

procedure HexaToByte(Cadena: string; var Vec: TArrayOfByte);
var
  i,p: Integer;
  s: string;
begin
  if Cadena[1] = ':' then
    Delete(Cadena, 1, 1);
  if Cadena[Length(Cadena)] <> ':' then
    Cadena:= Cadena + ':';
  i:= 1;
  repeat
    p:= Pos(':', Cadena);
    s:= Copy(Cadena, 1, p-1);
    if p > 0 then
    begin
      SetLength(Vec, i+1);
      try
        Vec[i]:= StrToInt('$'+ s);
      except
        raise Exception.Create('Error, ( '+s+' ) no es un número hexadecimal');
      end;
      Inc(i);
      Delete(Cadena, 1, p);
    end;
  until p = 0;
end;
...

Llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Vec: TArrayOfByte;
  i: Integer;
begin
  HexaToByte('01:02:03:04:0C:0A:0B:FF:40',Vec);
  (* Mostrar resultado en un Memo  *)
  Memo1.Clear;
  for i:= Low(Vec) to High(Vec) do
    Memo1.Lines.Add(IntToStr(Vec[i]))
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 06-04-2011 a las 04:08:02.
Responder Con Cita
  #4  
Antiguo 06-04-2011
Delfino Delfino is offline
Miembro
 
Registrado: Jul 2003
Ubicación: Madrid
Posts: 974
Poder: 16
Delfino Va por buen camino
Código Delphi [-]
function TextToBuffer(Command: string): TBytes;
  var I: Integer;
      slBuffer: TStringList;
begin
 slBuffer := TStringList.Create;
 try
  slBuffer.Delimiter := ':';
  slBuffer.DelimitedText := Command;
  SetLength(Result, slBuffer.Count);
  for I := 0 to slBuffer.Count - 1 do
    Result[i] := StrToInt('$' + slBuffer[i]);
 finally
  slBuffer.Free;
 end;
end;
__________________
¿Microsoft? No, gracias..

Última edición por Delfino fecha: 06-04-2011 a las 15:39:38.
Responder Con Cita
  #5  
Antiguo 07-04-2011
Lizeth Lizeth is offline
Miembro
 
Registrado: Aug 2005
Ubicación: Mexico D.F
Posts: 50
Poder: 14
Lizeth Va por buen camino
Gracias me han ayudado mucho, gracias gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como convertir un string a un array de byte K-ba Varios 2 13-02-2011 23:27:07
File of Byte kdemia Varios 2 27-05-2010 19:21:36
Pasar string a byte Novás Varios 6 27-11-2007 20:18:38
de BYTE a STRING emeceuy Varios 3 20-08-2004 16:29:32
ADO: Byte nulo (byte #0) en un string Pandre Conexión con bases de datos 0 02-04-2004 20:18:37


La franja horaria es GMT +2. Ahora son las 06:23:29.


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