Bác nào biết cách cắt một số 16bit thành 2 số 8bit chứa byte cao và byte thấp của số 16bit bẳng ngôn nhữ C chỉ em fát . Em xin đa tạ very much
Thông báo
Collapse
No announcement yet.
Help...Tách số 16bit thành 2byte(cao và thấp) dùng C
Collapse
X
-
ví dụ có khai báo thế này
unsigned int k;
unsigned char i,j,n,m;
j=k&0xff;//lấy byte thấp
i=(k>>8)&0xff;//lấy byte cao
hoặc là
n=8;
while(n--){k<<=1;m=c;i=(i<<1)|m;}//byte cao
n=8;
while(n--){k<<=1;m=c;j=(j<<1)|m;}//byte thấp
(C:cờ nhớ)
còn có rất nhiều cách nữa,bạn tự tìm hiểu nhé, mình chỉ bất chợt nghĩ đến cách này thôiLast edited by saoxathu; 22-08-2008, 00:58.dientuvietnam.net
Comment
-
Nguyên văn bởi quoc_thaibk Xem bài viếtunion INT_TO_BYTE
{
unsigned int i;
unsigned char b[2];
};
union INT_TO_BYTE test;
test.i=<số 16bit mà bạn muốn>;
muốn lấy số 8 bit thì cứ test.b[0] hay .b[1]dientuvietnam.net
Comment
-
Chương trình:
#include <AT89x52.h>
#include <stdio.h>
char s8bitlow; // so 8 bit LOW
char s8bithi; //so 8 bit HIGH
int s16bit; //so 16 bit
void main(void){
puts("CHIA SO 16 BIT RA 2 SO 8 BIT");
s16bit=0xABCD;
s8bitlow=s16bit;
s8bithi=s16bit>>8;
printf("So 16 bit: %X >> Byte cao %BX byte thap: %BX", s16bit,s8bithi,s8bitlow);
while(1);
}
KQ:
Running ... !
CHIA SO 16 BIT RA 2 SO 8 BIT
So 16 bit: ABCD >> Byte cao AB byte thap: CD
Comment
-
Nguyên văn bởi hungnp Xem bài viếtnhư của quocthaibk là tuyệt chiêu rồi.
Comment
-
Cách của bạn digicom là đúng rồi. Thích thì có cách khác, so sánh xem cái nào tốn ít lệnh hơn thì dùng.
So_16_bit / 256 = Byte_cao
So_16_bit % 256 = Byte_thap (Phep chia lay phan du)Ethernet-RS232, PIC Webserver, RFID Reader
CallerID, Cảnh báo BTS, ...
0988006696
linhnc308@gmail.com
http://linhnc308.blogspot.com
Comment
-
Mình đã dùng timer(Ngại đọc asm) để kiểm tra xem giữa khai báo kiểu union để lấy byte cao và byte thấp kể cả lấy giá trị của một bit bất kỳ trong một byte so với cách lấy bằng phép chia, phép phần dư, phép dịch bít,AND,OR,... như thông thường vẫn dùng thì thấy dùng khai báo union chương trình chạy nhanh hơn hẳn. Mà nhìn chương trình cũng chuyên nghiệp hơn?
Comment
-
Nguyên văn bởi hungnp Xem bài viếtMình đã dùng timer(Ngại đọc asm) để kiểm tra xem giữa khai báo kiểu union để lấy byte cao và byte thấp kể cả lấy giá trị của một bit bất kỳ trong một byte so với cách lấy bằng phép chia, phép phần dư, phép dịch bít,AND,OR,... như thông thường vẫn dùng thì thấy dùng khai báo union chương trình chạy nhanh hơn hẳn. Mà nhìn chương trình cũng chuyên nghiệp hơn?Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.
Comment
-
PHP Code:unsigned int test = 0xABCD;
unsigned char idata *a, byte_cao, byte_thap;
a = &test;
byte_cao = *a;
byte_thap = *(a+1);
Thực chất trong C, người ta thường dùng cách như saoxathu dùng
PHP Code:j=k&0xff;//lấy byte thấp
i=(k>>8)&0xff;//lấy byte cao
Diễn đàn Vi điều khiển:
Comment
-
hê hê, các bác góp ý thật là rôm rả. Em xin vote cho code (cách) của quocthai huynh. Rất ngắn mà dễ quản lý, chỉ cần khai báo một lần xài hoài, dùng cách dịch bit (<<,>>) cũng được nhưng hình như có vẻ không mang tính hệ thống bằng dùng kiểu union. E cũng mò mò tìm ra cách tương tự dùng union kết hợp struct có điều dài hơn của anh quocthai chút (hơn 1 lệnh thôi) (rút kinh nghiệm sau vậy..). Cảm ơn các huynh đã góp ý, chúc các huynh thành đạt VÀ EM LẠI CÓ THÊM MỘT CÂU HỎI MỚI NỮA NÈ:
-trong 2 cách khai báo sau có gì khác nhau không:
+cách 1:
************
typedef union split16to8
{
unsigned short i;
unsigned char lo;
unsigned char hi;
};
************
+cách 2:
************
typedef union
{
unsigned short i;
unsigned char lo;
unsigned char hi;
}split16to8;
************
+++nếu có giải thích giùm đệ chỗ khác đó
+++Nếu không thì tại sao khi đệ thêm câu lệnh này tiếp theo thì cách một báo lỗi còn cách 2 thì ko:
split16to8 number16bit;
----------HẾT------------------
TB:các bác giải thích thêm giùm em chỗ này cái, em ko thấy có kiểu khai báo này trong giáo trình C: union INT_TO_BYTE test;Last edited by apple; 23-08-2008, 01:53.Mấy ai định nghĩa được tình yêu.
Có gì đâu một buổi chiều.
Kề dao lên cổ yêu hay chết .
Gật đầu cái rụp thế là yêu.
--------
Apple
Comment
-
Nguyên văn bởi apple Xem bài viết
TB:các bác giải thích thêm giùm em chỗ này cái, em ko thấy có kiểu khai báo này trong giáo trình C: union INT_TO_BYTE test;
Còn mấy cái typedef thì nó chuyển qua lại thấy lằng nhằng quá hok muốn nhớ.
Cậu cứ mở quyển lập trình C của Quách Tuấn Ngọc là có ngay sự phân biệt rõ ràng đỡ mấy cái lằng nhằng hok đáng mất time đấy.
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
-
Nguyên văn bởi linhnc308 Xem bài viếtCách của bạn digicom là đúng rồi. Thích thì có cách khác, so sánh xem cái nào tốn ít lệnh hơn thì dùng.
So_16_bit / 256 = Byte_cao
So_16_bit % 256 = Byte_thap (Phep chia lay phan du)
So sánh với dịch bit thì dịch 8 lần chỉ tốn 3 chu kì máy (dsPIC hen còn cái khác thì tùy)
Sông dài, Thuyền lớn, Biển rộng bao la.
Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.
Comment
Bài viết mới nhất
Collapse
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 00:35 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 22:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 22:14 -
-
Trả lời cho Tự làm máy đo Cuộn cảmbởi bacthoHay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 21:48 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 21:43 -
-
Trả lời cho các bạn giúp mình về file HEX với!!!bởi bacthoBạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
-
Channel: Vi điều khiển họ 8051
Hôm qua, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 20:43 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Màn của e là LCD , e muốn thay thế bằng màn led thì có cáp chuyển đổi nào thực hiện đc việc đó ko nhỉ, nếu có bác mách e với....
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 16:34 -
-
bởi bqvietServo cuối cùng vẫn chỉ là điều chỉnh tốc độ và đọc phản hồi vị trí
Qua cổng song song LPT cổ
https://www.electronicsforu.com/elec...eed-controller
Qua cổng USB - xem thêm đám FT232RL-
Channel: Điện tử công nghiệp
22-11-2024, 15:56 -
Comment