2013-08-07 81 views
0

我有长度为8的整数的数组,一个示例可以是12345678 我需要把它变成如字节数组XX YY ZZ GG帕斯卡。转换INT到字节

如何去有关这个转换在帕斯卡?

+1

类似的问题http://stackoverflow.com/questions/13634240/delphi-xe3-integer-to-array-of-bytes – Sam

回答

0

在现代帕斯卡中,您可以使用圆括号进行投票。

例如,在自由帕斯卡:

{$mode fpc} 
program bytecast; 
uses sysutils; 
    type bytes = array[0..3] of byte; 
    var x : uint32 = $12345678; i : byte; b : bytes; 
begin 
    b := bytes(x); 
    for i := 0 to 3 do Writeln('$',IntToHex(b[i],1)) 
end. 

输出:

$78 
$56 
$34 
$12 

注意“向后”命令来了一个事实,即我在x86架构上运行,这使用little-endian字节顺序。

如果跨平台的可移植性是一个问题,那么你可以手动提取字节:

{ var r : uint32; ... } 
for i := 0 to 3 do               
    begin 
    DivMod(x, $100, x, r); { needs 'uses math'. note: this destroys x! } 
    b[3-i] := r 
    end; 

现在字节将被安排在一个更直观的订单,以及更早WriteLn环的输出成为:

$12 
$34 
$56 
$78 

这将在所有平台上,以及防止简单的铸件,在做多一点工作的任何成本帕斯卡尔方言的工作。 (关于另一个选项,请参见SwapEndian程序和此FPC wiki页面约cross platform code。)