小端
特征:数据的低字节保存在内存低地址,高字节保存在内存高地址。
注意:数据类型 char 和 unsigned char 类型是没有大小端之分的。
网络通信中,终端与服务器的通信数据需要保证大小端一致,终端和服务端约定一种方式,进行通信即可。
例如约定小端模式。那么终端在数据传输前,要将数据类型进行检测处理。
int little = 1;
if (*(char*)(&little) == 0) {
printf("big endian\n");
} else {
printf("little endian\n");
}
测试
#include <stdio.h>
unsigned char is_little_endian() {
static int little = 1;
return (*(char*)(&little) == 1);
}
void swap(void* data, int n) {
if (is_little_endian()) return;
int i;
unsigned char *p, temp;
p = (unsigned char*)data;
for (i = 0; i < n / 2; i++) {
temp = p[i];
p[i] = p[n - 1 - i];
p[n - 1 - i] = temp;
}
}
int main(int argc, char** argv) {
int a = 0x12345678;
swap(&a, sizeof(a));
printf("a: %x\n", a);
return 0;
}
更精彩内容,请关注我的博客:https://wenfh2020.com
网友评论