这些功能非常有用:
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;