我有一个长度为8的整数,例如12345678。 我需要把它变成一个字节数组,比如xx yy zz gg
我如何在pascal中转换?
答案 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。)