リトルエンディアン

ついにリトルエンディアンについて勉強しました。バイト列をメモリーに置くとき、小さいのを上位アドレスに置くか、下位アドレスに置くか、この違いなのです。どうやら IBM360/370というかつての名コンピューターではビッグエンディアンらしいのですが、現在のマイクロプロセッサーでは Core 7などを含め、インテル系など全てリトルエンディアンなのです。この問題は非常に深い問題であり、その点についての簡単な議論をここで見ることができます。
それはさておき、随分自分の知識というかスキルが進歩アップしたのですが、DHT tagの発見プログラムとして unsigned char * bufferにバイト列が蓄えられ、その中で 0xFFC4というDHT tagを発見するプログラム部分として まず、バイト検索では

unsigned char * bufTop = buffer;
unsigned char * temp;
for (long i = 0; i < bufSize; i++) {
  if (*buffer == 0xFF) {
    // tagマーカーに入った
    temp = buffer;
    buffer++;
    if (*buffer == 0xC4) {
      // DHTタグに入った
      std::cout << "DHT tag founded! ad address: ";
      std::cout << std::hex << temp << std::endl;
      buffer++;
    }
  }
}

となるのですが、これをワード(2 bytes)検索だと

unsigned short * bufTop = buffer;
for (long i = 0; i < bufSize/2; i++) {
  if (*buffer == 0xC4FF) { // DHT tagにヒットした
    std::cout << "DHT tag founded! at address: "; 
    std::cout << std::hex << buffer << std::end;
    buffer++;
  }
}

となるのです。ポインターの ++ 演算子による増加が 1 byteか 2 bytesかに気を付け、そしてリトルエンディアンであることに気をつけねばなりません。