测试机器的大小端
/*
* 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 0a
abcdef1
abcdef at memory array:
61 62 63 64 65 66 00 00