Overview

ByteBuffer

Binary data manipulation

Source Code

<?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));
?>

Result

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
On this page