在Delphi中将Byte数组转换为Integer

时间:2009-09-04 21:06:54

标签: delphi

  

类型B02 =字节的数组[01..02];

     

...

     

var b:B02;

     

...

     

//这里我从tcp socket

读取      

socket.ReadBuffer(b,2);

问题是:如何将B02转换为整数?

3 个答案:

答案 0 :(得分:8)

您可以在同一个内存位置声明Word / Smallint,如下所示:

var
  b : B02;
  myInt: smallint absolute B02;

然后,有没有什么特别的原因你不只是创建smallint并将其传递给ReadBuffer而不是数组?我不知道你正在使用什么类,但这看起来很像你从TStream中读取的方式,它会接受任何类型的变量,以及字节大小。为什么不将你的缓冲区声明为你正在寻找的整数类型并切断中间人?

答案 1 :(得分:4)

如果数据以“网络”顺序(最高字节优先)发送而不是“英特尔”顺序(最低字节优先),则可以自己做一些字节缩放。

uses
  SysUtils;

var
  b: B02;
  w: word; //two bytes represent a word, not an integer

socket.ReadBuffer(b, 2);
WordRec(w).Hi := b[1];
WordRec(w).Lo := b[2];

Mghie在评论中提出了以下方法(我同意他的观点):

uses Winsock;

var
  w: word;

socket.ReadBuffer(w, 2);
w := ntohs(w);

答案 2 :(得分:3)

你可以施展它:

var
  a: array[01..02] of Byte;
  i: Integer;
begin
  i := PWORD(@a)^;
end;

或者如果您需要更改字节顺序:

  i := Swap(PWORD(@a)^);