gpt4 book ai didi

delphi - 如何从字节中提取 "build"负 32 位整数而不出现范围检查错误?

转载 作者:行者123 更新时间:2023-12-03 15:21:16 29 4
gpt4 key购买 nike

我需要将 21 位有符号整数(以三个 7 位字符提供)转换为 32 位有符号整数。我正在尝试使下面的功能发挥作用。如果我将 outval 定义为整数,则会对“outval := outval or $FFF00000”语句进行范围检查。如果我将 outval 更改为长字,则会对“Val21bit := outval”进行范围检查。仅当值为负数时才会进行范围检查。

除了关闭作业周围的范围检查之外,是否有任何“正确”的方法来完成这项工作?

function Val21bit(sx:string):integer;       {Input of 3 character string, Vh, Vm, Vl}
var
outval : longword; // define as Longword to allow or-ing in high bit
{ valueH : 0scccccc
valueM : 0bbbbbbb
valueL : 0aaaaaaa
int : ssssssss sssscccc ccbbbbbb baaaaaaa }

begin
outval := byte(sx[1]); // 00000000 00000000 00000000 0scccccc highest order first
outval := (outval shl 7) or ($7F and byte(sx[2])); // 00000000 00000000 00sccccc cbbbbbbb
outval := (outval shl 7) or ($7F and byte(sx[3])); // 00000000 000scccc ccbbbbbb baaaaaaa
if (outval and $00100000) <> 0 then // ^ if sign bit is high, fill in to left
outval := outval or $FFF00000; // ssssssss sssscccc ccbbbbbb baaaaaaa
Val21bit := outval;
end;

最佳答案

是的,只需明确类型转换:

 Val21bit  := Integer(outval);

关于delphi - 如何从字节中提取 "build"负 32 位整数而不出现范围检查错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11704309/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com