最近時間比較閒,無事拿著深入理解計算機原理讀了起來;突然發現,平時只知道寫**,很多細節方面的知識都被我們忽略了,而這些東西隨時都可能給我們的程式造成乙個災難性但卻又難以發現的漏洞,比如在我們平時用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 ;所以就是假了
符號擴充套件和截斷
符號擴充套件和截斷的幾點認識 1.符號擴充套件。short inta 4 short intb 8 print binary a print binary b unsigned short intc a 型別轉換 unsigned intd a print binary c print binary...
注意Mysql資料截斷
比如 有乙個表aritcle和另乙個表article comment,關聯是article的id create table article id int 10 unsigned not null auto increment,name varchar 200 not null,primary key...
nginx 返回資料被截斷
今天在工作中遇到這麼乙個問題 客戶端向後台請求資料時,如果遇到返回資料很大時,客戶端獲得的資料會被截斷,找了很多地方,最終發現是nginx配置的問題,寫在此如果大家遇到類似問題可以進行參考。當nginx 遇到大資料流時,會把資料存到本地然後分次向客戶端傳輸。於是 1.存入檔案有許可權,讀取檔案沒有許...