タイプB02 =配列[01.02]バイト。デルファイでバイト配列を整数に変換
...
するvar B:B02。
...
は//ここで私は、TCPソケット
socket.ReadBufferから読み取る(B、2);
質問:B02を整数に変換する方法は?
タイプB02 =配列[01.02]バイト。デルファイでバイト配列を整数に変換
...
するvar B:B02。
...
は//ここで私は、TCPソケット
socket.ReadBufferから読み取る(B、2);
質問:B02を整数に変換する方法は?
あなたはこのように、同じメモリ位置でのWord/SMALLINTを宣言することができます:
var
b : B02;
myInt: smallint absolute B02;
その後、再び、あなただけのSMALLINTを作成して、その代わりのReadBufferにそれを通過しない理由は、特定の理由がありますアレイの?あなたが使っているクラスを正確にはわかりませんが、それはTStreamから読み込む方法とよく似ています。バイト数で表される変数と、すべての型の変数を受け入れます。なぜあなたが探している整数型としてあなたのバッファを宣言し、仲介者を切り捨てないのですか?
データが "Intel"の順番(最下位バイトが先)ではなく、 "ネットワーク"の順番で(最上位バイトが先に)送信されている場合は、自分で何らかのバイトを行うことができます。
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);
あなたはそれをキャストすることができます:
var
a: array[01..02] of Byte;
i: Integer;
begin
i := PWORD(@a)^;
end;
か、バイト順序を変更する必要がある場合を:
i := Swap(PWORD(@a)^);
+1私の心を読んでください。どちらの解決策でも、B02に文字データが含まれていない限り質問に答えます。 – skamradt
右。とにかく整数を使用したくない場合です。 –
ネットワーク上のデータがインテルのものではなく、ネットワークのバイトオーダーに格納されている可能性があります。 – gabr