如何在Delphi中将2个字节转换为一个16位数?

时间:2017-02-16 17:09:22

标签: delphi

所以我有2个字节,例如: 13,61

我想将它们转换为16位:3389

现在我正在使用这个功能:

{{1}}

在Delphi上有没有更好的方法呢?

3 个答案:

答案 0 :(得分:4)

有两种选择

function CreateWord(const A, B: byte): word;
begin
  result := word(A) shl 8 or B;
end;

function CreateWord(const A, B: byte): word;
var
  WR: WordRec;
begin
  WR.Hi := A;
  WR.Lo := B;
  result := word(WR);
end;

答案 1 :(得分:4)

这种方法很好。您也可以使用班次操作:

Result := N shl 8 + k;

Result := N shl 8 or k;

要么工作正常,你应该选择你喜欢的任何一个。

答案 2 :(得分:0)

你的代码很好。

如果N,K和结果定义为基数,编译器实际上将使用SHL asm操作码,实际上这些日期并不比*更快 - MUL是单周期操作IIRC。

function IntPower(const N, k: cardinal): cardinal; inline;
begin
  Result:= (256 * N) + k;
end;

这里的主要技巧是定义inline;,这将使代码更快。