这些功能非常有用:

function MakeWord(low, high: char): word;
begin
  result := byte(high) shl 8 + byte(low);
end;

function MakeWord(low, high: byte): word;
begin
  result := high shl 8 + low;
end;


但是,我想知道这些功能(可以以不同方式实现)是否已经存在于某个地方(不在Windows api特定文件中,而是跨平台RTL函数)。

用例示例:取两个字符GT并从中得出一个WORD结果。

MakeWord('G','T');


我发现这比在代码中插入SHL / SHR AND / OR十六进制操作和其他未描述代码功能的hack更具可读性……因此,这些功能肯定已经存在吗?还是人们在自己的应用程序中发挥自己的作用?

或类似的东西:

var x: word;
begin
  lo(x) := byte('G');
  hi(x) := byte('T');
end;


但是,这将无法正常工作,因为无法将左侧分配给:IMO比其他解决方案更具可读性。

我想我也看过LoWord和HiWord函数(或LoByte,HiByte),但通常是只读的。怎样写Hi和Lo呢?

最佳答案

Delphi和FreePascal在WordRec单元中均具有SysUtils记录:

德尔福:http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.WordRec

FreePascal:https://www.freepascal.org/docs-html/rtl/sysutils/wordrec.html

例如:

uses
 ..., SysUtils;

var
  x: Word;
begin
  WordRec(x).Lo := Byte(Ord('G'));
  WordRec(x).Hi := Byte(Ord('T'));
end;

07-25 23:38