栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、强制转换类型

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

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

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

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

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

二、强制转换注意事项

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

2.数据类型

三、显示转换

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

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

 

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

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

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

 

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

3.3.1 float转int

void main()
{
    float a = 333.33;
    int b = (int)a;
    printf("a: %fn", a);
    printf("b: %dn", b);
    system("pause");
}

 

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

3.3.2 int转float

void main()
{
    int a = 333;
    float b = (float)a;
    printf("a: %dn", a);
    printf("b: %fn", b);
    system("pause");
}

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

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

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

例如:

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

 

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

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

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

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

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

3.5 总结

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

四、隐示转换

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

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

3.比如

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

 

视频链接:

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

交流群: 833075627

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号