ASCII码图:
大小端,字节对齐问题代码验证:
#include<iostream>
using namespace std;
#pragma pack(1) //一字节对齐 输出V(56) 4660(1234)
struct TalkFrame {
char cFlag;
short sb;
}*frame;
/*
big-endian 是高位的放在内存低地址处,低位的放在高地址处。
little-endian 是高位的放在内存高地址处,低位的放在低地址处。
栈:由高地址向低地址
x86:小端,网络字节序一般大端
*/
int main() {
int num = 0x12345678;
int *pnum = #
frame = (TalkFrame *) pnum; //会丢失高位12
std::cout << sizeof(frame->sb) << std::endl;
std::cout << frame->cFlag << std::endl; //输出V -》34(舍弃) 56(16进制)= 86(ASCII码)
std::cout << frame->sb << std::endl; //输出18 由于2字节对齐,所以取 12(16进制)= 18
return 0;
}
结论见代码注释,符合预期结果。