0

ポインターを指定して、最初の 2 バイトを固定値と比較したいと思います。 data空ポインタです。これよりも「良い」方法はありますか:

unsigned char foo[] = {0xFF, 0x3B};
memcmp(data, foo, 2);

たぶん、新しい文字配列を作成する必要がない場所ですか? ありがとう!

4

2 に答える 2

1

確かに を使用して実行してみてください。ただし、オーバーヘッドが発生する場合は、 @LS_devが提案memcmp()するように実行できますが、エンディアンの問題を回避するために明示的な文字アクセスを行うことをお勧めします。

if(((unsigned char *) data)[0] == 0xff && ((unsigned char *) data)[1] == 0x3b)
{
}

もちろん、明確さを大幅に向上させるためにキャストを除外することは理にかなっています。

const unsigned char *chardata = data;
if(chardata[0] == 0xff && chardata[1] == 0x3b)
{
}
于 2013-10-02T09:58:29.817 に答える
1

sizeof(char)編集: 、メモリの配置、およびコンパイラ/ライブラリの最適化に関するいくつかの懸念により、

プラットフォームに依存する代替手段として、この回答は次の場合よりもパフォーマンスが向上する場合がありmemcmpます。

リトル エンディアン (Intel バイト オーダー):

if (*(short*)foo == 0x3bff) ...

ビッグ エンディアン (ネットワーク バイト オーダー):

if (*(short*)foo == 0xff3b) ...
于 2013-10-02T09:41:56.863 に答える