|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請教一個關(guān)于char和int數(shù)據(jù)的問題 |
| 作者:lzb7198047 欄目:單片機 |
本人在有兩個unsigned CHAR變量,想吧他們整合到一個unsigned int中去,請問,有C如何編寫,對速度有一定的要求,本人用KEIL 2編譯器,AT89C52單片機 |
| 2樓: | >>參與討論 |
| 作者: djc001 于 2005/9/12 21:58:00 發(fā)布:
用指針,強制類型轉(zhuǎn)換 |
|
| 3樓: | >>參與討論 |
| 作者: isoar 于 2005/9/12 22:15:00 發(fā)布:
union |
|
| 4樓: | >>參與討論 |
| 作者: icecut 于 2005/9/12 22:34:00 發(fā)布:
注意 你用調(diào)試-顯示匯編代碼 看看他們的編譯效果,然后采取算法盡量用移位和邏輯運算這樣比較快 |
|
| 5樓: | >>參與討論 |
| 作者: fjhcpu 于 2005/9/13 18:15:00 發(fā)布:
位移加強制類型加強制類型轉(zhuǎn)換 |
|
| 6樓: | >>參與討論 |
| 作者: lzb7198047 于 2005/9/22 20:53:00 發(fā)布:
請教 我曾用過一個方法,但編譯器總是報錯: int p; CHAR a,b; (CHAR *)&p=a; (CHAR *)&p+1=b; 哪位能幫我想想,可能是錯在什么地方? |
|
| 7樓: | >>參與討論 |
| 作者: taoest 于 2005/9/22 21:12:00 發(fā)布:
error int p; CHAR a,b; *(CHAR *)&p=a; *(((CHAR *)&p)+1)=b; 地址=數(shù)值?哈哈 * - 本貼最后修改時間:2005-9-22 21:13:39 修改者:taoest |
|
| 8樓: | >>參與討論 |
| 作者: zizzfish 于 2005/9/22 21:55:00 發(fā)布:
用聯(lián)合 |
|
| 9樓: | >>參與討論 |
| 作者: PandaFeng 于 2005/9/22 22:25:00 發(fā)布:
也可以這樣 typedef unsigned int UINT16; #define MAKEWORD(low,high) (UINT16) ( (UINT16)(high)<<8 | (low) ) { UINT16 p; CHAR a,b; a = 1; b = 2; p = MAKEWORD(a,b); } * - 本貼最后修改時間:2005-9-22 22:27:33 修改者:PandaFeng |
|
| 10樓: | >>參與討論 |
| 作者: dandangl 于 2005/9/23 8:54:00 發(fā)布:
直接強制類型轉(zhuǎn)換不行么? |
|
| 11樓: | >>參與討論 |
| 作者: gwnpeter 于 2005/9/23 12:04:00 發(fā)布:
union!!!!! |
|
| 12樓: | >>參與討論 |
| 作者: 道源 于 2005/9/23 12:54:00 發(fā)布:
參考一下 uint uchar2_to_uint(uchar x,uchar y)//把X和Y合并為一個unsigned int; { data uint z; z=(uint) x; z=z<<8;//把x移動到高字節(jié) z=z|y;//把y或到低字節(jié) return(z); } ********************************************* 1433: uint uchar2_to_uint(uchar x,uchar y)//把X和Y合并為一個unsigned int; 1434: { 1435: data uint z; 1436: z=(uint) x; C:0x08DB AB07 MOV R3,0x07 C:0x08DD 7A00 MOV R2,#0x00 1437: z=z<<8;//把x移動到高字節(jié) C:0x08DF EB MOV A,R3 C:0x08E0 7B00 MOV R3,#0x00 C:0x08E2 FA MOV R2,A 1438: z=z|y;//把y或到低字節(jié) C:0x08E3 E4 CLR A C:0x08E4 ED MOV A,R5 C:0x08E5 FB MOV R3,A 1439: return(z); C:0x08E6 AE02 MOV R6,0x02 C:0x08E8 FF MOV R7,A 1440: } C:0x08E9 22 RET * - 本貼最后修改時間:2005-9-23 13:04:45 修改者:道源 |
|
| 13樓: | >>參與討論 |
| 作者: 阿西西里 于 2005/9/23 14:53:00 發(fā)布:
union很占資源 |
|
| 14樓: | >>參與討論 |
| 作者: dudongdao 于 2005/9/23 16:02:00 發(fā)布:
最簡便快速的方法 在定義a和b的時候挨在一起,這樣編譯器會分配兩個連續(xù)的地址給他們: unsigned CHAR a; unsigned CHAR b; 在用的時候比如 unsigned int p; 想把a,b的直給p p=(int)a;就可以了~~~ |
|
| 15樓: | >>參與討論 |
| 作者: yanfengzhu 于 2005/9/23 20:32:00 發(fā)布:
有多種方法 如:uchar a, b; uint c = (uint)a << 8 | b; 或者: uchar data a, b, *pc; uint *pi; pc = pi; *pc++ = a; *pc = b; |
|
| 16樓: | >>參與討論 |
| 作者: computer00 于 2005/9/23 20:37:00 發(fā)布:
我也來搞一下, unsigned int x; unsigned CHAR a,b; ((unsigned CHAR *)&x)[0]=a; //x 高字節(jié) ((unsigned CHAR *)&x)[1]=b; //x 低字節(jié) |
|
| 17樓: | >>參與討論 |
| 作者: yubaihuan 于 2005/9/23 22:29:00 發(fā)布:
直接用(uint) 方法很多的 |
|
| 18樓: | >>參與討論 |
| 作者: bolshie 于 2005/9/30 15:43:00 發(fā)布:
下面的代碼將a,b合并成一個值 /* 下面的代碼將a,b合并成一個值 在TC20中運行結(jié)果為: 3909 450 451 452 454 455 459 */ #include <stdio.h> unsigned CHAR a; unsigned int c; unsigned CHAR d; unsigned CHAR b; LONG e; unsigned CHAR f; int *p; int main() { a = 0x09; /* int c = 0x00;*/ c = 0x00; d = 0x29; b = 0x39; p=(int *) &a; printf("%x \n", *p); printf("%x \n", &a); printf("%x \n", &b); printf("%x \n", &c); printf("%x \n", &d); printf("%x \n", &e); printf("%x \n", &f); getch(); } |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號 |