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';
Dec := StrToInt(Hex);
ShowMessage(IntToStr(Dec));
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;
begin
EOL := #$8F;
TcpClient1.Receiveln(EOL);
end;
Espero sea útil
Nelson.