Re: [問題] C語言int轉byte寫入char

看板C_and_CPP作者 (內褲魔)時間14年前 (2010/12/07 15:57), 編輯推噓7(7011)
留言18則, 11人參與, 最新討論串3/4 (看更多)
請問一下如果剛好跟這題相反 想要將四個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

12/07 23:58, , 1F
union
12/07 23:58, 1F

12/08 00:02, , 2F
"12" -> ('1' - '0')*10 + ('2' - '0')
12/08 00:02, 2F

12/08 00:11, , 3F
char temp[4]={1,2,3,4};
12/08 00:11, 3F

12/08 00:11, , 4F
int num=0;
12/08 00:11, 4F

12/08 00:11, , 5F
for(int i=0;i<3;i++)
12/08 00:11, 5F

12/08 00:12, , 6F
num=(num+temp[i])<<8;
12/08 00:12, 6F

12/08 00:12, , 7F
num+=temp[3];
12/08 00:12, 7F

12/08 00:15, , 8F
以上的高手想法完全不一樣......
12/08 00:15, 8F

12/08 00:55, , 9F
2樓想表示char轉數字要注意bit表示 綜合3樓應該就原PO要得
12/08 00:55, 9F

12/08 02:01, , 10F
char temp[4]; int num; num=*((int *)temp);
12/08 02:01, 10F

12/08 02:01, , 11F
只不過上面的方法可能要注意endian的問題
12/08 02:01, 11F

12/08 02:03, , 12F
假設int是4byte
12/08 02:03, 12F

12/08 02:58, , 13F
我以為int *num = (int*)temp;這樣就可以了吧
12/08 02:58, 13F

12/08 11:51, , 14F
一樓的umion才是王道
12/08 11:51, 14F

12/08 12:49, , 15F
推union
12/08 12:49, 15F

12/08 20:45, , 16F
感謝樓上幾位 小弟在此一拜
12/08 20:45, 16F

12/09 00:44, , 17F
union很好用. 不過好像還要檢查 大小印地安
12/09 00:44, 17F

12/09 07:19, , 18F
推union
12/09 07:19, 18F
文章代碼(AID): #1C_bbUjH (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1C_bbUjH (C_and_CPP)