Ver Mensaje Individual
  #4  
Antiguo 09-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
rabata2001,

Cita:
Empezado por rabata2001
...Entiendo que la instrucción format pasa de AnsiChar a código hexadecimal(%x)...
Es correcto , en Delphi se puede convertir de Dec a Hex y viceversa de la siguiente forma:
Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 var
    Hex : String;
    Dec : Integer;
 
 begin
 
    Hex := '$8F'; // 8F en Hex = 143 en Dec
 
    // Convierte de Hex a Dec
    Dec := StrToInt(Hex);
    ShowMessage(IntToStr(Dec));
 
    // Convierte de Dec a Hex
    Hex := Format('%.2x',[Dec]);
    ShowMessage(Hex);
 
 end;
Cita:
Empezado por rabata2001
...Es la cadena completa, cuando realiza la transformación (código indicado arriba), se puede observar que el contenido es más grande...


Revisa este código:
Código Delphi [-]
 procedure TForm1.Button2Click(Sender: TObject);
 var
    i : Integer;
    Hex, HexFmt : String;
    Buffer : PAnsiChar;
 
 begin
 
    Buffer := 'Ž'#2#$1F;
 
    for i := 0 to Length(Buffer) - 1 do
    begin
       Hex := Format('%.2x',[Ord(Buffer[i])]);
       HexFmt := HexFmt + '{' + Hex + '} ';
    end;
 
    MessageDlg(HexFmt,mtInformation,[mbOK],0);
 
 end;
El código anterior, convierte la cadena de caracteres 'Ž'#2#$1F en su representación hexadecimal y muestra su contenido, el cual en este caso es el siguiente:



¿Por que la salida difiere de lo sugerido en el Msg #3?, en la cadena 'Ž'#2#$1F hay tres caracteres :

1- 'Ž' = 8E en Hex (En la cadena representado como un carácter).
2- #2 = 02 en Hex (En la cadena representado como un número decimal).
3- #$1F= 1F en Hex (En la cadena representado como un número hexadecimal).

Luego no entiendo lo siguiente :
Cita:
Empezado por rabata2001
Delphi me pinta esto: 'Ž'#2#$1F, pero al convertirlo a caracteres ascii, me trae lo siguiente en hexadecimal:

{8E} {02} {1F} {00} {5B} {36} {00} {00} {02} {00} {01} {02} {00} {00} {07} {02} {25} {00} {0C} {01} {79} {06} {01} {00} {81} {04} {97} {12} {02} {00} {8F} {8E} {02} {1F} {00} {5B} {36} {00} {00} {02} {00} {01} {02} {00} {00} {07} {02} {25} {00} {0C} {01} {79} {06} {01} {00} {81} {04} {97} {12} {02} {00} {8F} {00}
Sin embargo siguiendo la estructura de caracteres sugerida por la cadena 'Ž'#2#$1F, el carácter delimitador 8F debe venir de la siguiente forma en la cadena recibida : #$8F, luego:
Código Delphi [-]
 procedure TForm1.Button3Click(Sender: TObject);
 var
    EOL : PAnsiChar; //String; // AnsiString;
 
 begin
    EOL := #$8F;
    TcpClient1.Receiveln(EOL);
 end;
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 09-05-2014 a las 02:44:15.
Responder Con Cita