所以我有2个字节,例如: 13,61
我想将它们转换为16位:3389
现在我正在使用这个功能:
{{1}}
在Delphi上有没有更好的方法呢?
答案 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;
,这将使代码更快。