十四.C++网络安全学员之强制转换类型

一、强制转换类型

1.从名字上来理解关键在于类型转换中“转换“二字的理解

2.想必大家也能理解 其实就是 一种类型转换为另一种类型

3.类型转换分为: 显示转换 和 隐示转换

4.区别在于 显示需要再变量名前加(需要转换的类型名) 而隐示转换是不需要加的 会自动根据定义的类型自动转换

5.虽然说是自动转换 但是也要做注意 可不是任何类型都可以任意转换的哦

二、强制转换注意事项

1.转换的类型 和 被转换的类型 的数据宽度

2.数据类型

三、显示转换

3.1 有符号和无符号在数据宽度 基本类型相同的转换

void main()
{
    unsigned char a =198  ;
    char b = (char)a;
    printf("a: %d\n",a);
    printf("b: %d\n",b);
  system("pause");
}

 

3.2 数据宽度不同的情况转换

类型不是可以随意强制转换的,数据宽度要相同 否则会丢失数据 除非特意安排

void main()
{
    int a = 0x12345678;
    char b = (char)a;
    printf("a: %d\n", a);
    printf("b: %d\n", b);
    system("pause");
}

 

3.3 数据类型不同 但 数据宽度相同的 转换

3.3.1 float转int

void main()
{
    float a = 333.33;
    int b = (int)a;
    printf("a: %f\n", a);
    printf("b: %d\n", b);
    system("pause");
}

 

我们会看到当float类型转int类型,小数部分会省略,这里注意可不是四舍五入哦!

3.3.2 int转float

void main()
{
    int a = 333;
    float b = (float)a;
    printf("a: %d\n", a);
    printf("b: %f\n", b);
    system("pause");
}

继续发现当int类型转float类型,会在后面多出6个0成为浮点数也就是小数

3.4 字符串和数字之间的转换

上面的数据类型转换都是数字之间的转换,那么如果字符串和数字之间的转换能直接强制转换得到我们想要的结果吗?答案肯定是否定的.

例如:

void main()
{
    char name[6]={'1','2','3','4','5','\0'};
  int  nameID=(int)name;
    printf("a: %s\n", name);
    printf("b: %d\n", nameID);
    system("pause");
}

 

虽然能编译成功,但是结果完全不是我们想要的,会导致得到很多不确定的值.

所以我们要确保类型能正确的转换.

那么我们的字符串就不能转换成数字吗?答案也是否定的, 当然能转换,只是需要一个转换函数,atoi();类似这样的类型转换函数C/C++有很多库函数,这里就不一一列举了.我们改进下刚才的代码.

void main()
{
    char name[6]={'1','2','3','4','5','\0'};
    int  nameID=atoi(name);
    printf("a: %s\n", name);
    printf("b: %d\n", nameID);
    system("pause");
}

看!我们得到了我们想要的数字了!

3.5 总结

  1. 类型转换要考虑 类型的宽度 和 类型种类.
  2. 不要随意转换类型,我们必须确保我们能知道最后的结果.例如:数据截断导致的丢失数据(除非在特定的场合下).
  3. 使用类型转换函数能够转换强制转换不能够直接转换的类型.

四、隐示转换

1.其实上面讲到了显示转换,这个隐示转换就一回事了,只是隐示转换不需要在变量名加(需要被转换类型)

2.但是要特别注意的就是我们必须要明确知道编译器是怎么自动判断转换的是什么类型.

3.比如

void main()
{
    int a = 0x12345678;
    char b = a;
    printf("a: %d\n", a);
    printf("b: %d\n", b);
    system("pause");
}

 

视频链接:

十四.网络空间安全 类型转换-CSDN直播

交流群: 833075627

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值