看板 C_and_CPP 關於我們 聯絡資訊
請問一下如果剛好跟這題相反 想要將四個char合成int的話 char temp[4]; int *num; for(int i=0;i<4;i++) num=(int*)temp[i]; 我的想法是這樣 不過根本compile不過 請益各位高手了 ※ 引述《pico2k (風月)》之銘言: : ※ 引述《Rebeel (123)》之銘言: : : 遇到的問題: (題意請描述清楚) : : 今天面試被問到一個問題 : : 當場掛住= =|| : : 回來後查了一些資料還是不太懂 : : 感覺是很基礎的問題但是從來沒想過... : : int a 為1個4 byte : : char a1,a2,a3,a4 為4個 1 byte : : 問題:如何將 int a □□□□ : : 分別寫入 a1 □ a2 □ a3 □ a4 □ : : 首先第一個疑問是,例如int a=10 好了,那int a=10 所佔的4個byte裡面是什麼呢? : : 光是這個我就搞不懂了= = : : 再來是要寫到char裡面 : : 一個char不是一個字元嗎? : : int a=10 那 4個byte不會是1010吧! : : 既然不是剛好 4個字元 : : 又要怎麼寫到 4個char裡面? : : 上網查了一下有些Java或C++的範例 : : 但是跟我想問的好像不太一樣... : ... : int a = 10; : char *c = null; : c = (char*)&a; : a1 = *c; : a2 = *(c+1); : a3 = *(c+2); : a4 = *(c+3); : ... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.54.240
james732:union 12/07 23:58
purpose:"12" -> ('1' - '0')*10 + ('2' - '0') 12/08 00:02
tomet:char temp[4]={1,2,3,4}; 12/08 00:11
tomet:int num=0; 12/08 00:11
tomet:for(int i=0;i<3;i++) 12/08 00:11
tomet: num=(num+temp[i])<<8; 12/08 00:12
tomet:num+=temp[3]; 12/08 00:12
stupid0319:以上的高手想法完全不一樣...... 12/08 00:15
Yshuan:2樓想表示char轉數字要注意bit表示 綜合3樓應該就原PO要得 12/08 00:55
tingyushyu:char temp[4]; int num; num=*((int *)temp); 12/08 02:01
tingyushyu:只不過上面的方法可能要注意endian的問題 12/08 02:01
tingyushyu:假設int是4byte 12/08 02:03
stupid0319:我以為int *num = (int*)temp;這樣就可以了吧 12/08 02:58
stool100:一樓的umion才是王道 12/08 11:51
horngsh:推union 12/08 12:49
cophie:感謝樓上幾位 小弟在此一拜 12/08 20:45
sandr1983:union很好用. 不過好像還要檢查 大小印地安 12/09 00:44
xatier:推union 12/09 07:19