联合体、 指针强制类型转换实现判断大小端、 用位段实现ip地址的二进制序列转化为点分十进制

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// ---------判断大小端
//		0x11223344   
//   ------------->   地址由低到高
// 大端存储方式: 11 22 33 44	高位在低地址上 (符合直觉)
// 小端存储方式: 44 33 22 11	低位在低地址上 


// 定义一个联合体
union Un {
	int n;
	char m;
};
int IsLittle() {
	// 1.-----用联合体实现:联合体内所有变量共用一块内存
	union Un num;
	num.n = 0x1;        // 把 int 型成员变量赋值为1 
	// printf("%d\n", num.m);     // 用 char 读取这段内存,
	return num.m;
}

int isLittle() {
	// 2.-----用强制类型转换实现 int* 到 char* 的转变
	// 如果是大端,强转后取0x11; 
	// 如果是小端,强转后取0x44;
	int n = 0x11223344;
	char ret = *(char*)&n;
	if (ret == 0x44) {
		return 1;     // 是小端
	}
	else {
		return 0;
	}
}
int main() {

	//判断大小端
	if (IsLittle() == 1) {
		printf("小端\n");
	}
	else {
		printf("大端\n");
	}

	system("pause");
	return 0;
}

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>   // 包含数据类型int32_t, int8_t

union Uu {
	int32_t n ;
	struct {
		int8_t a;
		int8_t b;
		int8_t c;
		int8_t d;
	};
}u;

int main() {
	u.n = 0x1;      
	printf("%d的点分十进制:", u.n);
	printf("%d.%d.%d.%d\n", u.a, u.b, u.c, u.d);
	
	system("pause");
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值