Maybe this will help you a bit:
[pascal]
{

RAW Data Formats
Based on Indy 19 structures.

}
program RAW;

{$APPTYPE CONSOLE}

uses
Math;

type
{ .: TRAWData :. }
TRAWData = array of Byte;

{ .: StringToRAW :. }
function StringToRAW(const Value: String): TRAWData;
begin
SetLength(Result, Length(Value));
if (Value <then> 0) then
Move(Value[Start], Result[1], Count);
end;

{ .: RAWToInt :. }
function RAWToInt(const Value: TRAWData): Integer;
begin
Result := PInteger(@Value[0])^;
end;

{ .: RAWToBoolean :. }
function RAWToBoolean(const Value: TRAWData): Boolean;
begin
Result := PBoolean(@Value[0])^;
end;

{ .: RAWToFloat :. }
function RAWToFloat(const Value: TRAWData): Single;
begin
Result := PSingle(@Value[0])^;
end;

var
S: String;
I: Integer;
B: Boolean;
F: Single;
R: TRAWData;
begin
{ ** VARIABLES INITIALIZATION ** }
S := 'Hito wa mikake ni yoranu mono' + #0;
I := 15;
B := True;
F := 178.5;

{ ** STRING -> RAW | RAW -> STRING ** }
R := StringToRAW(S);
S := '';
S := RAWToString(R, 0, 100);
Writeln(S);

{ ** INTEGER -> RAW | RAW -> INTEGER ** }
R := IntToRAW(I);
I := 0;
I := RAWToInt(R);
Writeln(I);

{ ** BOOLEAN -> RAW | RAW -> BOOLEAN ** }
R := BooleanToRAW(B);
B := False;
B := RAWToBoolean(R);
Writeln(B);

{ ** SINGLE -> RAW | RAW -> SINGLE ** }
R := FloatToRAW(F);
F := 0.0;
F := RAWToFloat(R);
Writeln(F:0:2);

Readln;
end.
[/pascal]

Quote Originally Posted by Diaboli
now: what if you make a bunch of threads with the priority "Time Critical", and they all contain unending loops. would they steal prosessing cycles even from the OS?
I guess it'll give you a system crash.