收到一个2个字节(16位)表示的数据,怎么还原成真实数据(100)

  • 主题发起人 主题发起人 shhw
  • 开始时间 开始时间
S

shhw

Unregistered / Unconfirmed
GUEST, unregistred user!
我向一个设备发送一个数据请求,它们返回一个整形的数据包,数据格式是按照高位在前,低位在后的顺序发过来的。请问:我收到后怎么样把高位和低位加起来,组成一个真实的数据??比如:高位是12 ,低位是20 我是不是需要先转化为字符串格式,相加后在转化为整形???
 
没有人解答啊
 
没有16进制啊返回的就是10进制的??请举例说明一下
 
一般返回给你的数据是十六进制的多, 你只要转换成十进制就行。
 
怎么用啊给一个例子
 
几个函数可能对你有用。Procedure SwapEx1(var Inp:Smallint );var Buf:smallint;begin Buf:=inp; Inp:=Swap(Buf);end;Procedure SwapEx2(Var Inp:word );var Buf:Word;begin Buf:=inp; Inp:=Swap(Buf);end;Procedure SwapEx3(var Inp:integer);var Buf:Longword; bufH,bufL:word; BufDH:Longword;begin Buf:=Longword(inp); BufH:=Word((Buf shr 16) and $0000ffff); BufL:=Word(Buf and $0000ffff); SwapEx2(BufH); SwapEx2(BufL); BufDH:=((BufL and $0000ffff) shl 16); Inp:=BufDH or BufH;end;Procedure SwapEx4(var Inp:Longword);var Buf:Longword; bufH,bufL:word; BufDH:Longword;begin Buf:=inp; BufH:=word((Buf shr 16) and $0000ffff); BufL:=word(Buf and $0000ffff); SwapEx2(BufH); SwapEx2(BufL); BufDH:=((BufL and $0000ffff) shl 16); Inp:=BufDH or BufH;end;如果收到的数据位 Val:=$1220Swapex1(val);val 内为已经转换好的 整形数。
 
谁对天津贝克的真空开关比较熟悉
 
WORD MAKEWORD( BYTE bLow, // low-order byte of short value BYTE bHigh // high-order byte of short value );
 
procedure TForm1.Button1Click(Sender: TObject);var a,b:byte; x :word;begin a := 20; b := 12; x := b; x := x shl 8; x := x + a; ShowMessage(IntToStr(x));end;
 
多人接受答案了。
 
var a, b: integer; c: int64;begin a := 12; b := 20; c := 0; c := c or a; c := c shl 32; c := c or b; ShowMessage(IntToStr(c));end;
 
后退
顶部