1
假設我有一個充滿數據的緩衝區,並且我已將其從網絡中取出。在緩衝區中投射指針
uint8_t buffer[100];
現在想象一下,這個緩衝區有不同的字段。有些是1個字節,有些是2個字節,有些是4個字節。所有這些字段都打包在緩衝區中。
現在假裝我想抓取16位字段中的一個的值。說,在緩衝區中,字段中,儲存像這樣:
buffer[2] = one byte of two byte field
buffer[3] = second byte of two byte field
我可以抓住像這樣的值:
uint16_t* p_val;
p_val = (int16_t*) &buffer[2];
or
p_val = (int16_t*) (buffer + 2);
printf("value: %d\n", ntohs(*p_val));
有什麼不對這種方法?或者我應該注意的對準問題?
兩個問題:字節順序和對齊。前者可能更重要,因爲編譯器應該通過投入更多的代碼來處理後者。但你必須處理自己的Endianness。 – 2014-12-02 20:53:08
假設我從一個以太網數據包獲得了緩衝區,那麼當解引用解決排序問題時,這個ntohs會是什麼? – user1764386 2014-12-02 20:57:44
還有[嚴格的別名](http://stackoverflow.com/a/99010/274261) – ArjunShankar 2014-12-02 20:58:23