测试机器的大小端
/** if this machine is little-endian mode, it works like this:+---------------+Low Add |ADD:0x0001|0x00| <---- cursor+---------------+High Add |ADD:0x0002|0xff| <---- cursor+1+---------------+*/void endianMode() {unsigned char *cursor; //单字节的游标指针unsigned short num = 0xff00; //储存两个字节的数cursor = (unsigned char *)# //进行隐式类型转换if (*cursor < *(cursor + 1)) //如果高地址值更大printf("little-endian"); //则机器为小端模式else printf("big-endian");}
//这段程序来自CSAPP,测试机器大小端分配方式#include <stdio.h>#include <string>typedef unsigned char* byte_pointer;void show_bytes(byte_pointer start, int len) {int i;for (i = 0; i < len; i++)printf("%.2x ", start[i]);printf("\n");}int main() {int i = 180150000;i += 1;//这个1可以换成任意小于等于0xf的数,来确认数据差异printf("%x at memory array:\n", i);show_bytes((byte_pointer)&i, sizeof(i));printf("%x\n", i);//在不同平台,大小端的排布方式不同//这个顺序可能不同const char* s = "abcdef";//算上NULL一共7个printf("%s at memory array:\n", s);show_bytes((byte_pointer)s, strlen(s)+2); //应该打印8个//但是在所有平台上ascii码的结果都几乎一致,所以ascii有更好的平台兼容性return 0;}
结果如下
abcdef1 at memory array:f1 de bc 0aabcdef1abcdef at memory array:61 62 63 64 65 66 00 00
