delphi – 如何在没有范围检查错误的情况下从字节“构建”负32位
发布时间:2020-12-15 09:36:27 所属栏目:大数据 来源:网络整理
导读:我需要将一个21位有符号整数(以三个7位字符提供)转换为32位有符号整数.我正在努力使下面的功能工作.如果我将outval定义为整数,我会在“outval:= outval或$FFF00000”语句中检查范围.如果我将outval更改为长字,我会在“Val21bit:= outval”上进行范围检查.
我需要将一个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; 解决方法
是的,只是明确地进行了类型转换:
Val21bit := Integer(outval); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |