数据的扩展与截断
来源:互联网 发布:浙工大图书馆网络 编辑:程序博客网 时间:2024/06/05 02:12
最近时间比较闲,无事拿着深入理解计算机原理读了起来;突然发现,平时只知道写代码,很多细节方面的知识都被我们忽略了,而这些东西随时都可能给我们的程序造成一个灾难性但却又难以发现的漏洞,比如在我们平时用C或C++编程的时候,我们经常会用到类似数据类型强制转换等操作,而我们却没有用心去考虑,这样的转换是否存在漏洞现在简单说说数据的扩展和截断。
1、数据的扩展
在数据扩展的时候,需要将数据扩展成字符数更长的数据的时候,一般低位都保持不变,继续保留原有的数据,多出的高字节数据,需要根据当前被扩展数据进行不同的填充。
如果被转换的数据是是无符号型数据,则直接简单的填充0;相反,如果被转换的数据是有符号数据,则要根据它的最高位进行区分,如果最高位是0,则填充0,反之,则填充1;
2、数据截断
数据截断,顾名思义,根据要求,将数据的高字节数据截去,只保留低字节部分。很容易理解。
虽然这样看,数据的扩展和截断都是很容易理解的,但是,在我们平时编程的时候,如果不加以留意,随时都可能造成隐患;下面举个例子
0x0000fffeU,这是一个正数,我们首先将他进行截断成一个short int 的数据 short x = (short)0x0000fffe; 得到的数字是0xfffe, 如果再将他转换成unsigned int ,得到的数字是
0xfffffffeU,一个数字,截断之后,再转回来,完全不一样;
感觉这种数据转换里面存在这各种雷区,如果稍不留意,可能就会踩中地雷。再举个简单的例子
int x = -1;
if (x < 0) ..... 这里得到的是真
if(x < 0u) ...... 这里就是假了,因为 C语言里面会进行隐示的转换,默认将int 转换成unsigned int ;所以就是假了
- 数据的扩展与截断
- 符号位扩展,数据截断
- 数据的截断
- C语言的有符号与无符号,二进制整数的扩展与截断
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
- 《深入理解计算机系统》笔记一:信息的表示与处理(3)——整数的转换、扩展、截断和运算
- 符号扩展和截断
- 扩展一个数字的位表示和截断数字
- 日志文件的截断与收缩
- 位扩展和位截断
- 注意Mysql数据截断
- 数据报截断
- 无符号数 与 有符号数--转换规则、陷阱、扩展截断和溢出
- jsp过长的数据,截断在后面补以....显示
- 保存数据时,发生截断字符的解决方法
- 将截断字符串或二进制数据,语句终止的解决方法
- 将截断字符串或二进制数据,语句终止的解决方法
- 解决“串口接收数据时被截断”的问题
- stm32 HardFault_Handler调试及问题查找方法
- 求数组中和最大的子数组并输出子数组序列
- Eclipse下debug时候提示找不到源文件(edit the source lookup path)
- 实现ajax的异步调用代码
- java求两个日期之间的时间差
- 数据的扩展与截断
- 职场血的教训
- jQuery全屏滚动插件fullPage.js中文文档API
- 02
- 17 AVR中的定时器喂狗的作用
- RecyclerView的简单使用(一)
- 调用JAVA API对HDFS文件进行文件的读写、上传下载、删除等操作代码详解
- HDU 4355 Party All the Time(三分精度问题)
- 数据库中的事务