【发布时间】:2017-07-01 13:17:39
【问题描述】:
这些功能很有用:
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 十六进制操作和其他不描述代码在做什么的黑客行为更具可读性......所以这些函数肯定已经存在于某个地方吗?还是人们会在他们的应用程序中自行开发?
或者类似的东西:
var x: word;
begin
lo(x) := byte('G');
hi(x) := byte('T');
end;
但是,这不起作用,因为左侧无法分配给:但它比其他一些解决方案更具可读性,IMO。
我想我也见过 LoWord 和 HiWord 函数(或 LoByte、HiByte),但通常是在只读情况下。给hi和lo写信怎么样?
【问题讨论】:
-
你知道
Char的大小吗? -
@MBo:我猜
Byte()的演员阵容解决了这个问题。 -
@Rudy Velthuis 这个演员表隐藏了潜在的问题(信息丢失),没有完全解决它
-
@MBo:在大端平台上,确实是个问题。
-
MBo,怎样才能完全解决它?感谢您的注意。此外,在 Remy 的回答中,他使用了 Ord() 和 Byte() (两个演员表)......这些是我希望编程语言可以避免的那些讨厌的事情。事实上,演员表的使用是第一个警告,有些事情可能不正确。在 wiki 上,有人曾经说过演员表是谎言的开始。
标签: delphi bit-manipulation bit-shift word freepascal