2017-10-22 3 views
0

バイトの配列[0..2]を持っています。バイトがその配列にあるかどうかを調べる必要があります。しかし、if ($52 in byteArray) thenを使用すると、「オペレータが過負荷にならない」というエラーが発生します。私はバイトとして追加の変数を設定し、それをステートメントで使用しようとしましたが、まだエラーが発生します。これを示す非常に簡単なプログラムがあります:バイトの配列内のバイトをチェックするときに "演算子がオーバーロードされません"

program overloaded; 

var 
    byteArray: array[0..2] of Byte; 

begin 
    byteArray[0] := $00; 
    byteArray[1] := $69; 
    byteArray[2] := $52; 

    if ($52 in byteArray) then 
    writeLn('We will not get to this point'); 
end. 

これはFPC 3.0.2の上記のエラーでコンパイルに失敗します。

+4

これは予想されます。配列をループする必要があります。 –

答えて

0

あなたには2つの選択肢があります。

program ByteArrayIteration; 
var 
    ByteArray: array[0..2] of Byte = ($00, $69, $52); 
    SomeByte : Byte = $52; 
begin 
    for SomeByte in byteArray do 
    if SomeByte = $52 then 
    begin 
     WriteLn('We will get to this point'); 
     Break; 
    end; 
end. 

および過負荷の代替:

program OverloadInOperator; 

uses SysUtils; 

operator in(const A: Byte; const B: TBytes): Boolean; 
var 
    i: Integer; 
begin 
    Result := True; 
    for i := Low(B) to High(B) do if A = B[i] then Exit; 
    Result := False; 
end; 

var 
    Bytes : TBytes; 
    AByte : Byte = $52; 
begin 
    Bytes := TBytes.Create($41, $52, $90); 
    if AByte in Bytes then WriteLn('Done'); 
end. 

ご利用の場合は、アレイあたり255の項目に限られている場合は、代わりにセットを使用することを検討してください。

program SetOfByte; 
var 
    Bytes : set of Byte = [$41, $52, $90]; 
    AByte : Byte = $52; 
begin 
    if AByte in Bytes then WriteLn('Done'); 
end. 
関連する問題