2

1024バイトに合うようにバイト配列を使用します。問題は、コード内の別々の時間に、それらのビットの一部のみを使用する必要があることです。Cでは、私は使用しました...

byte buff[] = read();
strcmp( buff, "CMD\r\n" );

これにより、配列内のそれ以降のすべてのバイトが無視され、最初の5バイトのみが比較されます。Javaでこれを行う簡単な方法はありますか?

4

2 に答える 2

5

バイトの配列をArrays.equals(byte []、byte [])と比較できます。

byte[] buff = ...;
boolean isEqual = Arrays.equals( buff, 
                    "CMD\r\n".getBytes( Charset.forName( "US-ASCII" )));

編集:あなたのバイト配列が1024バイトであることを見逃しました。

1つのオプションは、バイト配列のスライスを比較することです。

byte[] buff = ...;
final byte[] CMD_BYTES = "CMD\r\n".getBytes( Charset.forName( "US-ASCII" ));
boolean isEqual = Arrays.equals( Arrays.copyOf( buff, CND_BYTES.length()),
                    CMD_BYTES );

もう1つのオプションは、バイト配列を文字列に変換して、C++と同様の式を使用できるようにすることです。

byte[] buff = ...;
int buffLen = ...;
String command = new String( buff, 0, buffLen, Charset.forName("US-ASCII"));
int cmp = command.compareTo( "CMD\r\n");
于 2012-07-27T14:15:11.180 に答える
3

自分で書くのは簡単です。

public static boolean truncatedEquals(byte[] x, byte[] y) {
    int upperBound = Math.min(x.length, y.length);
    for (int i = 0; i < upperBound; i++) {
        if (x[i] != y[i]) {
            return false;
        }
    }
    return true;
}

このためにJavaに組み込まれているものはないと思います。

入力を2つにしたことに注意してください。byte[]バイトと文字列は非常に異なるため、異なる方法で処理する必要があります。

于 2012-07-27T14:15:54.040 に答える