帕斯卡尔。将int转换为byte数组

时间:2013-08-07 00:22:37

标签: arrays byte pascal

我有一个长度为8的整数,例如12345678。 我需要把它变成一个字节数组,比如xx yy zz gg

我如何在pascal中转换?

1 个答案:

答案 0 :(得分:0)

在现代pascal中,您可以使用括号来转换值。

例如,在free pascal中:

{$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架构上运行,该架构使用小端字节顺序。

如果需要考虑跨平台可移植性,那么您可以手动提取字节:

{ 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

这将适用于所有平台以及任何阻止简单投射的pascal方言,但代价是做一些工作。 (有关其他选项,请参阅SwapEndian程序和此FPC维基页面关于cross platform code。)