ポインターを指定して、最初の 2 バイトを固定値と比較したいと思います。
data
空ポインタです。これよりも「良い」方法はありますか:
unsigned char foo[] = {0xFF, 0x3B};
memcmp(data, foo, 2);
たぶん、新しい文字配列を作成する必要がない場所ですか? ありがとう!
確かに を使用して実行してみてください。ただし、オーバーヘッドが発生する場合は、 @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)
{
}
sizeof(char)
編集: 、メモリの配置、およびコンパイラ/ライブラリの最適化に関するいくつかの懸念により、
プラットフォームに依存する代替手段として、この回答は次の場合よりもパフォーマンスが向上する場合がありmemcmp
ます。
リトル エンディアン (Intel バイト オーダー):
if (*(short*)foo == 0x3bff) ...
ビッグ エンディアン (ネットワーク バイト オーダー):
if (*(short*)foo == 0xff3b) ...