Binary data manipulation
<?pas
// ByteBuffer: Binary data manipulation
// Create buffer and set size
var buf: ByteBuffer;
buf.SetLength(64);
// Write data at specific positions
buf.SetInt32(0, $48454C4C); // "HELL" as bytes
buf.SetInt32(4, $4F000000); // "O" + padding
buf.SetDouble(8, 3.14159265); // Double precision
buf.SetWord(16, 2025); // Year as 16-bit
PrintLn('Buffer length: ' + buf.Length.ToString);
// Read back
PrintLn('First 4 bytes as Int32: $' + buf.GetInt32(0).ToHexString(8));
PrintLn('Double at offset 8: ' + buf.GetDouble(8).ToString);
PrintLn('Word at offset 16: ' + buf.GetWord(16).ToString);
// Convert to hex string for inspection
PrintLn('');
PrintLn('Hex dump (first 20 bytes):');
var hexStr := '';
for var i := 0 to 19 do begin
hexStr += buf.GetByte(i).ToHexString(2) + ' ';
if (i + 1) mod 8 = 0 then hexStr += ' ';
end;
PrintLn(hexStr);
// DataString pattern for file I/O
var dataStr := buf.ToDataString;
PrintLn('');
PrintLn('DataString length: ' + dataStr.Length.ToString);
// Parse binary from DataString
var parsed := ByteBuffer(dataStr);
PrintLn('Parsed double: ' + parsed.GetDouble(8).ToString);
// Records can be serialized to binary if needed
type
TFileHeader = record
Magic: Integer;
Version: Integer;
end;
var header: TFileHeader;
header.Magic := $44575321;
header.Version := 1;
PrintLn('');
PrintLn('Header Magic: $' + header.Magic.ToHexString(8));
?>
Buffer length: 64 First 4 bytes as Int32: $48454C4C Double at offset 8: 3.14159265 Word at offset 16: 2025 Hex dump (first 20 bytes): 4C 4C 45 48 00 00 00 4F F1 D4 C8 53 FB 21 09 40 E9 07 00 00 DataString length: 64 Parsed double: 3.14159265 Header Magic: $44575321