Mega Code Archive
Turning integers and words
This article was originally posted to delphi3000.com
Sometimes it is nessescary to turn the bytes of an integer. This is known as the big-endian/little-endian problem, and occurs when you receive data from a machine with another byte order:
Some machines arranges bytes from left to right.
Other arranges them from right to left.
Delphi has implemented a function called swap() that can turn integers. But here are some examples on how to do it yourself.
// Turning a smallint (16 bit signed)
function i16( i : smallint ) : smallint;
var
x1 : smallint;
x2 : array[0..1] of byte absolute x1;
x3 : array[0..1] of byte absolute i;
begin
x2[0] := x3[1];
x2[1] := x3[0];
result := x1;
end;
// Turning a word (16 bit unsigned)
function r16( i : word) : word;
var
x1 : word;
x2 : array[0..1] of byte absolute x1;
x3 : array[0..1] of byte absolute i;
begin
x2[0] := x3[1];
x2[1] := x3[0];
result := x1;
end;
// Turning a longint (32 bit signed)
function r32( i : longint) : longint;
var
x1 : longint;
x2 : array[1..4] of byte absolute x1;
x3 : array[1..4] of byte absolute i;
begin
x2[1] := x3[4];
x2[2] := x3[3];
x2[3] := x3[2];
x2[4] := x3[1];
result := x1;
end;
Do you see the pattern?