概述
在網絡應用開發以及定義C語言結構體位域時涉及到字節序與比特序的問題,本文驗證了ESP8266的這一特性。
術語
大小端模式(記憶:大正小反)
大端模式(網絡字節序):
是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中,這樣的存儲模式有
點兒類似於把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;正:這和我們的閱讀習慣一致。
小端模式:
是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地
址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低。反:這和我們的閱讀習慣不一致。
測試代碼與結果
typedef struct {
unsigned h1:4;
unsigned h2:4;
unsigned h3:4;
unsigned h4:4;
} NiffH16;
/*
* 驗證ESP8266的字節序與比特序,下面這段程序輸出是:
p[0] = 34
p[1] = 12
h1 = 04
h2 = 03
h3 = 02
h4 = 01
*/
static void ICACHE_FLASH_ATTR verifyEndian(void)
{
uint16_t a = 0x1234;
uint8_t *p = (uint8_t *)&a;
NiffH16 *nh = (NiffH16 *)&a;
iotgoInfo("p[0] = %02X", p[0]);
iotgoInfo("p[1] = %02X", p[1]);
iotgoInfo("h1 = %02X", nh->h1);
iotgoInfo("h2 = %02X", nh->h2);
iotgoInfo("h3 = %02X", nh->h3);
iotgoInfo("h4 = %02X", nh->h4);
}
結論
ESP8266爲小端字節序,比特序與字節序一致。