大家都知道,乙個int 或 unsigned int是由4個位元組組成的,(《c/c++學習指南》,第3章,第3.2.3節:變數的記憶體檢視)
例如,int n = sizeof( int) ; // n為4
大家也能夠清晰明白地看到記憶體裡,那4個位元組就在那,(《c/c++學習指南》,附錄:vc2008除錯方法)
但問題是:如何在**裡轉成4個位元組呢?
方法1:memcpy
這種方法很暴力,也不科學。大家先試一下。
unsigned int a = 0x12345678;
unsigned char buf[4];
memcpy(buf, &a, 4);
觀察buf陣列的4個元素的值,是不是就是0x78 0x56 0x34 0x12 (嗯,小端的,這就是缺陷,我們想要的結果其實是 buf[0]=0x12 buf[1]=0x34 buf[2]=0x56 buf[4]=0x78)
方法2:正規方法 (《c/c++學習指南》,第6章,第6.8節)
buf[0] = a >> 24;
buf[1] = a >> 16;
buf[2] = a >> 8;
buf[3] = a;
用你的vc看一下,是不是正合你意。直接在除錯狀態下看,別再printf了。
不用謝了,應該的!
int為什麼佔4個位元組?乙個位元組為什麼是8位?
不知道大家有沒有思考過這樣的問題,乙個位元組為什麼是8位呀,也許還有小夥伴不知道我說的這些是什麼,沒關係往下看。第乙個解釋 歷史 是ibm為system 360設計了一套8位ebcdic編碼,涵蓋了數字 大小寫字母和大部分常用符號,同時又相容廣泛用於打孔卡的6位bcdic編碼。第二個解釋,二進位制我...
c語言將乙個string 數字轉成 int 數字
1簡介 1.1 c語言庫函式名 1.2 功 能 1.3 1.4 原型 1.5 unicode 2函式說明 atoi 把 字串轉換成 整型數。ascii to integer 的縮寫。int atoi const char nptr wtoi 引數nptr字串,如果第乙個非空格字元存在,是數字或者正負...
經典 反轉乙個位元組
這道題很古老了,可別將它和大端轉小端混淆了,所謂大端和小端指的是位元組序,而這裡反轉乙個位元組說的是位序,演算法更是不勝列舉,說實話都能達到目的,剩餘的就是看看誰的效率更高了,基本上這是乙個最難的問題,高手不是能寫出最美麗的程式而是能寫出既美麗同時效率又是最高的程式,如果乙個人寫的程式很美麗,很直觀...