Delphi/Lazarus: Mostrar Array de Bytes como Cadena de Valores HEX
Consejo de Stefan Trost | Última actualización el 18/02/2023 | Creado el 02/04/2021
Cuando se trabaja con Byte Arrays, tarde o temprano surge la cuestión de la visualización. Aquí tiene sentido generar los bytes individuales en forma hexadecimal como una cadena (string) para luego mostrar esta cadena al usuario, por ejemplo, en un campo de memo o mediante un mensaje. En este consejo, quiero mostrarle una función que hace precisamente eso.
En el ejemplo, usamos la siguiente definición de una matriz de bytes:
type TByteArr = array of Byte;
Función para convertir Matrices de Bytes en Cadenas Hexadecimales
Para visualizar matrices de bytes de este tipo en una cadena, usamos la siguiente función. La función recorre la matriz de bytes pasada como primer parámetro byte por byte y convierte cada valor de byte individual a su valor hexadecimal correspondiente:
function ByteArrayToHexString(AByteArray: TByteArr; ASep: string = ''): string; var i, k: integer; begin result := ''; if ASep = '' then begin for i := low(AByteArray) to high(AByteArray) do result := result + IntToHex(AByteArray[i], 2); end else begin k := high(AByteArray); for i := low(AByteArray) to k do begin result := result + IntToHex(AByteArray[i], 2); if k <> i then result := result + ASep; end; end; end;
La función se puede llamar con solo una matriz de bytes u, opcionalmente, con un separador como segundo parámetro, que se escribe entre los bytes individuales para una mayor claridad y legibilidad. Hemos establecido este separador en una cadena vacía de forma predeterminada en la función, de modo que cuando se llama a la función con un solo parámetro, no se escribe ningún separador entre los bytes individuales.
Ejemplo de llamada de la Función
Veamos un ejemplo de cómo podemos usar la función presentada:
var BA: TByteArr; s: string; begin SetLength(BA, 4); BA[0] := 65; BA[1] := $41; BA[2] := %1000001; // esto solo funciona en Lazarus BA[3] := ord('A'); s := ByteArrayToHexString(BA); // 41414141 s := ByteArrayToHexString(BA, ' '); // 41 41 41 41 end;
En este ejemplo, primero creamos una matriz de bytes de 4 bytes de longitud y luego la llenamos con algunos valores. Luego usamos nuestra función para generar estos valores.
Incluso si hemos asignado valores "diferentes" a los elementos individuales de la matriz, cada elemento de la matriz tiene el mismo valor después del llenado. Acabamos de escribir el valor hexadecimal "41" de diferentes maneras: una vez como un valor decimal (65), una vez como un valor binario (1000001) y una vez llamando a la función ord('A'), que nos da el valor ASCII de la letra "A", que también es 65 o #41.
Cargar y Guardar Matriz de Bytes
En este contexto, también es interesante cómo cargar o guardar una matriz de bytes de respectivamente a un archivo. Puede obtener más información sobre esto en el tutorial vinculado, que muestra funciones y ejemplos para ambos casos.
Sobre el Autor
Puede encontrar software de Stefan Trost en la pagina es.sttmedia.com. ¿Necesita un software individual según sus propios requisitos? Escribenos: es.sttmedia.com/contacto
Ver Perfil
Temas Relacionados
Lazarus: Cargar Archivo como Array de Bytes y Guardar Array de Bytes como Archivo
Tutorial | 0 Comentarios
MySQL: Saltos de Línea en MySQL
Consejo | 0 Comentarios
Script Batch: Apagar Computadora Windows
Tutorial | 2 Comentarios
Delphi/Lazarus: Mostrar Fecha y Hora actuales
Consejo | 0 Comentarios
VirtualBox: Cambiar la Fecha y la Hora
Tutorial | 10 Comentarios
Lazarus: Entrada de Números binarios, hexadecimales y integers
Artículo | 0 Comentarios
Delphi/Lazarus: Cargar Byte Array desde MemoryStream
Pregunta | 1 Respuesta
Aviso Importante
Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.
Participar
Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.