概述
在网络应用开发以及定义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为小端字节序,比特序与字节序一致。