从串口读取4个字节。如何得到整数 ( 积分: 100 )

  • 主题发起人 主题发起人 me555555
  • 开始时间 开始时间
M

me555555

Unregistered / Unconfirmed
GUEST, unregistred user!
var
cardbuf:array[0..3] of byte;
int:integer ;
begin
cardbuf[0]:=$9F;
cardbuf[1]:=$F9;
cardbuf[2]:=$7F;
cardbuf[3]:=$B5;
求函数。通过该函数得到
int:=2683928501;//此数据是计算器得到的。现求函数
 
计算器都可以算出来,你不会通过写程序算出来?那你学什么编程呀
 
to delphilxh
够牛。你写个看看呀
 
晕,小学的算术还要牛人写吗?再说我也不牛,
 
学编程的人可以不会这个题目, 因为编程的不一定懂计算机;
学计算机的如果不会这个题目就说不过去了, 的确是个小学题目;
有个简单的但效率不高的方法:
先将4个字节分别赋值给4个整数i1,i2,i3,i4,
再运算 i1 + i2 shl 8 + i3 shl 16 + i4 shl 24; // 顺序可能有变化;
有个简单而高效地方方法(但你对编程的数据组织要熟悉):
将4个字节分别赋值给一个整数的4个字节; // 这个要用到变量地址(指针)操作...
var i : integer;
b1,b2,b3,b4 : byte;
pb : Pbyte;
begin
// b1=.. b2=.. b3=.. b4=..
pb := @i;
pb^ := b1
inc(pb);
pb^ := b2;
inc(pb);
pb^ := b3;
inc(pb);
pb^ := b4;
result := i;
end;
 
to 新世纪
你的公式也不对。你自己运算一下。已经给出了四个字节的值。
var i : integer;
b1,b2,b3,b4 : byte;
pb : Pbyte;
begin
b1:=$9F;
b2:=$f9;
b3:=$7f ;
b4:=$b5 ;
pb := @i;
pb^ := b1 ;
inc(pb);
pb^ := b2;
inc(pb);
pb^ := b3;
inc(pb);
pb^ := b4;
result:=i; //这里得到的是‘-1249904225’ 计算器算出的是 ‘2683928501’
有写出函数的请运算一下正确否
 
运算 i1 + i2 shl 8 + i3 shl 16 + i4 shl 24;
是这样吧
il[0]:=$9F;
il[1];:=$f9;
il[2];:=$7f ;
il[3];:=$b5 ;

int:=0;
int:= int or il[0];
int:= int or (il[1] shl 8);
int:= int or (il[2] shl 16);
int:= int or (il[3] shl 24);
// 也是负数‘-1249904225’
 
var
cardbuf:array[0..3] of byte;
i: Int64 ; // Integer -2147483648..2147483647 signed 32-bit
begin
cardbuf[0]:=$9F;
cardbuf[1]:=$F9;
cardbuf[2]:=$7F;
cardbuf[3]:=$B5;
i := 0;
i := cardbuf[0] shl 24;
i := i or cardbuf[1] shl 16;
i := i or cardbuf[2] shl 8;
i := i or cardbuf[3];
ShowMessage(IntToStr(i));
 
接受答案了.
 
说过了的, 你要调整一下字节的先后顺序, 我只是给你一个方法, 最后要你自己完成.
 
后退
顶部