tim*_*11g 4 delphi type-conversion delphi-7
我需要将一个21位有符号整数(以三个7位字符提供)转换为32位有符号整数.我正在努力使下面的功能工作.如果我将outval定义为整数,我会在"outval:= outval或$ 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
470 次 |
| 最近记录: |