Delphi 和 FPC 是否具有 MakeWord 函数(两个字节或字符)?

Does Delphi and FPC have MakeWord functions (out of two bytes or chars)?

这些函数很有用:

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),但通常是在只读的情况下。写信给你好和你好吗?

Delphi和FreePascal在SysUtils单元中都有一条WordRec记录:

Delphi: 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;

是的,FreePascal在windows单元有makeword。(makeword本来就是一个winapi宏IIRC)

此外,它还具有内联功能,可以优化像这样的小函数的调用开销。