uint8_t* buffer; // pointer to 8 bit or simply one byte
バッファはバイトのメモリアドレスを指します -> |byte0|byte1|byte2|....
(uint16_t*)&buffer[0] // &buffer[0] is actually the same as buffer
(uint16_t*)&buffer[0]
等しい(uint16_t*)buffer
; 16 ビットまたはハーフワードを指している
(uint16_t*)buffer
メモリを指す: |byte0byte1 = halfword0|byte2byte3 = halfword1|....
w = *((uint16_t*)&buffer[18]);
メモリ アドレスをバッファのバイト 18 に取り、このアドレスをハーフワードのアドレスに再解釈し、このアドレスでハーフワードを取得します。単純にw = byte18 と byte19 をくっつけてハーフワードを形成する
h = *((uint16_t*)&buffer[22]);
h = バイト 22 とバイト 23 を結合
UPDより詳細な説明:
h = *((uint16_t*)&buffer[22])
=>
1) buffer[22]
=== バッファの 22 番目の uint8_t (別名バイト)。それをbyte22と呼びましょう
2) &buffer[22]
=== &byte === メモリ内の byte22 のアドレス。これは uint8_t* 型で、buffer と同じです。byte22_address と呼びましょう。
3) (uint16_t*)&buffer[22]
= (uint16_t*)byte22_address; byte のアドレスを (2 バイトをくっつけたもの。同じアドレスのハーフワードのアドレス。halfword11_address と呼びましょう。) のアドレスにキャストします。
4) h = *((uint16_t*)&buffer[22])
=== *halfword11_address; * 演算子は、11 番目のハーフワードまたはバイト 22 と 23 をくっつけたアドレスで値を取ります。