0

我有一个长度为 8 的整数,例如 12345678。我需要将其转换为字节数组,例如 xx yy zz gg

我该如何在帕斯卡中转换它?

4

1 回答 1

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 页面。)

于 2013-08-08T04:36:50.457 回答