Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Thao tác với mảng trong C như thế nào ??

  1. #1
    Ngày gia nhập
    04 2009
    Bài viết
    0

    Mặc định Thao tác với mảng trong C như thế nào ??

    em đang làm một mạch quang báo cần đến một đoạn chưong trình trong c

    Hàm này phải có khả năng lấy về từng byte trong mảng của em theo như hình em mô tả các anh hướng dẫn cho nhé...

    với mảng được mã hóa theo kiểu :

    manghienthi [200] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A ,0x0b,0x0C,0x0d,0x0e,0x0f,0x10,// kí tự x
    0x10,0x20,0x30,0x40............................... ................................................., 0x20//kí tự y
    ........
    }
    mỗi kí tự được mã hóa thành 16 byte..
    nếu có thể send cho em vài gợi ý theo mail : codonminhanh_2005491@yahoo.com
    thanks 1
    Attached Thumbnails Attached Thumbnails Dich bit.JPG  
    Đã được chỉnh sửa lần cuối bởi beiudientu : 01-04-2009 lúc 05:58 PM.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    đọc kĩ lại nội quy tại :
    http://forums.congdongcviet.com/showthread.php?t=15

    và nội quy box C tại :
    http://forums.congdongcviet.com/announcement.php?f=20



    bài viết của bạn vi phạm nội quy.

    PHP Code:
    nếu có thể send cho em vài gợi ý theo mail codonminhanh_2005491@yahoo.com 
    theo nội quy thì ko được post bài dạng này



    tuy nhiên tôi sẽ giúp bạn giải quyết vấn đề của bạn ...
    Trước hết bạn hãy đặt câu hỏi đầy đủ , rõ ràng và mạch lạch hơn, để mọi người có thể hiểu bạn đang muốn gì : đề bài, bạn đã làm đến đâu, cần giải quyết chỗ nào.
    Đã được chỉnh sửa lần cuối bởi langman : 01-04-2009 lúc 07:06 PM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  3. #3
    Ngày gia nhập
    04 2009
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    đọc kĩ lại nội quy tại :
    http://forums.congdongcviet.com/showthread.php?t=15

    và nội quy box C tại :
    http://forums.congdongcviet.com/announcement.php?f=20



    bài viết của bạn vi phạm nội quy.

    PHP Code:
    nếu có thể send cho em vài gợi ý theo mail codonminhanh_2005491@yahoo.com 
    theo nội quy thì ko được post bài dạng này



    tuy nhiên tôi sẽ giúp bạn giải quyết vấn đề của bạn ...
    Trước hết bạn hãy đặt câu hỏi đầy đủ , rõ ràng và mạch lạch hơn, để mọi người có thể hiểu bạn đang muốn gì : đề bài, bạn đã làm đến đâu, cần giải quyết chỗ nào.
    sorry !! em là dân ngoại đạo chỉ được học rất cơ bản về món này nên không hiểu sâu về nó.. mong anh hướng dẫn :

    giải sử em có một mảng và em sẽ truy xuất đến mảng đó như sau:

    PHP Code:
     char mang_1[5] ={0x01,0x02,0x03,0x04,0x5}// mảng gốc 
    với kiểu dữ liệu ở mỗi phần tử của mảng có độ lớn là 1 byte.

    em dùng một hàm để lấy từng byte dữ liệu của mảng này (mang_1)
    PHP Code:
    char mang_2[5];

    for(
    int i=0;i<=5,i++) //lặp lại 5 lần
    mang_2[i] = mang_1[i] ; // copy các phần tử của mang_1 vào mang_2
      

    với mỗi lần vòng lặp em có thể lấy ra 1 byte của mảng gốc.. ..
    -Nhưng bài toán của em là phải lấy ra từng byte một theo kiểu dịch một cái khung có kích thước 1 byte từ trái sang phải mảng gốc :
    char mang_1[5] ={0x01,0x02,0x03,0x04,0x5}// mảng gốc
    mỗi lần cái khung sẽ dịch một bít..và nó sẽ trả về một byte mới được tạo thành từ sự kết hợp giữa 2 byte kế tiếp...

    ví dụ : {0x01,0x02} <=> {a0a1a2a3a4a5a6a7a,b0b1b2b3b4b5b6b7}//giả sử
    em cần một cái khung có độ lớn 8 bit (1 byte) để dịch trên cái mảng này từ trái sang phải mối lần em dịch một bít và thu được những byte mới như sau
    :
    { lần 1 : a0a1a2a3a4a5a6a7 //1 byte
    lần 2: a1a2a3a4a5a6a7b0 // 1 byte
    lần 3; a2a3a4a5a6a7b0b1 //1 byte
    lần 4: a3a4a5a6a7b0b1b2 // 1 byte
    lần 5 : a4a5a6a7b0b1b2b3 // 1 byte
    ......................
    đến đây có lẽ anh đã hiểu là bài toán đắt ra là em cần lấy những byte trong mảng của mình mà dùng một cái khung (biến) dịch tư từ từng bít để tạo ra những byte mới có sự kết hợp giữa 2 phần tử trong mảng theo như nguyên tắc trên... ở bài trước em có post cái hình minh họa tác dụng của hàm đó là như thế đó .
    Đã được chỉnh sửa lần cuối bởi langman : 01-04-2009 lúc 11:18 PM.

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    bạn thấy nhé :
    địa chỉ trong máy đều phân chia đến byte chứ ko phân chia đến bit. để có thể can thiệp đến bit 1 cách nhanh thì theo mình cần ngôn ngữ sơ cấp hơn C, cụ thể là asm và mình chưa học.

    tuy nhiên với vấn đề của bạn, tại sao ta ko giải quyết 1 cách đơn giản hơn ? đó là ta chuyển các phần tử đó ra binary rồi lấy cái ta cần.

    mình làm thử 1 hàm ví dụ nha :

    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>






    char lay(char *xau,int n)  //lay cai ban can lan thu n
        
    {
            
    char temp;
            if (
    n%strlen(xau)) return printf("vuot ra khoi xau roi")-20;   // chinh la return 0 va viet them cai dong day
            
    if (n%8==0) return xau[n/8];//neu ma n chia het cho 8 tuc la 1 ki tu tren mang roi

            //vay 8 bit ta can lay se nam giua xau[n/8] va xau[n/8 +1]
            
    int x=xau[n/8]*0x100+xau[n/8+1];  //gia su xau[n/8] = 0xAB va xau [n/8]=0xCD thi ta co a=0xABCD;

            //doc 8 bit do

    //đến đây việc đọc 8 bít tính từ bit thứ n%8 của số x rất đơn giản bạn có thể tham khảo cách đọc bit của thinhlv

    //sau khi lấy được 8 bít đó ra thì chỉ việc chuyển ngược lại thành số thập phân gán vào temp;







            
    return temp;

        }
    void main(void)
        {
            
    clrscr();


            
    getch();
        } 
    Đã được chỉnh sửa lần cuối bởi langman : 02-04-2009 lúc 10:14 AM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  5. #5
    Ngày gia nhập
    04 2009
    Bài viết
    1

    Hi beiudientu.
    Để có thể lấy ra từng byte một theo kiểu dịch một cái khung có kích thước 1 byte từ trái sang phải mảng gốc như bạn đã mô tả, mình gợi ý bạn làm như sau:
    PHP Code:
    //pData la mảng dữ liệu của bạn, n là số phần tử của mảng
    //Hàm DisplayView sẽ hiển thị toàn bộ khung nhìn của bạn ra màn hình.
    void DisplayView(bytepDataint n)
    {
        if((
    pData == '\0') || (<= 0))    
        {
            
    printf("Data incorrect");
            return;
        }
        
    byte viewer pData[0];
        
    printf("%s"viewer);//Hien thi khung nhin dau tien
        
    for(int i 1ni++){
                    
    //Nếu là dữ liệu đầu vào pData kiểu mảng 2byte thì phải cho lặp từ j = 15. Tương tự cho các kiểu dữ liệu khác
            
    for(int j 7>= 1j++)
            {
                
    viewer = (viewer << 1) + GetBit(pData[i], j);
                
    printf("%s"viewer);//Hien thi khung nhin tiep theo;
            
    }
        }
    }
    //Lấy ra giá trị bit (0 hay 1) ở vị trí chỉ định trong 1 byte
    byte GetBit(byte databyte index)
    {
        return ((
    data >> index) & 0x01);

    đọc kĩ nội quy hộ cái nha - langman
    Đã được chỉnh sửa lần cuối bởi thinhlv : 02-04-2009 lúc 03:21 PM.

  6. #6
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Mặc định Thao tác với mảng trong C như thế nào ??

    @thinhlv đề nghị bạn đọc kĩ nội quy , có phần yêu cầu cho code vào tag code đó

    @beiudientu :

    PHP Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>






    char lay(char *xau,int n)  //lay cai ban can lan thu n
        
    {
            
    char temp;
            if (
    n%strlen(xau)) return printf("vuot ra khoi xau roi")-20;   // chinh la return 0 va viet them cai dong day
            
    if (n%8==0) return xau[n/8];//neu ma n chia het cho 8 tuc la 1 ki tu tren mang roi

            //vay 8 bit ta can lay se nam giua xau[n/8] va xau[n/8 +1]
            
    int x=xau[n/8]*0x100+xau[n/8+1];  //gia su xau[n/8] = 0xAB va xau [n/8]=0xCD thi ta co a=0xABCD;

            //doc 8 bit do

    //đến đây việc đọc 8 bít tính từ bit thứ n%8 của số x rất đơn giản bạn có thể tham khảo cách đọc bit của thinhlv

    //sau khi lấy được 8 bít đó ra thì chỉ việc chuyển ngược lại thành số thập phân gán vào temp;







            
    return temp;

        }
    void main(void)
        {
            
    clrscr();


            
    getch();
        } 
    Đã được chỉnh sửa lần cuối bởi langman : 02-04-2009 lúc 10:56 AM.
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    04 2009
    Bài viết
    0

    Thanks anh langman và anh thinglv ...... em sẽ copy mấy đoạn code của các anh về xem cho kĩ... bí thì lại mong các anh hướng dẫn cho thêm.. ah em có đưa thêm một cái file power point để các anh coi ..mở file rồi nhấn phím F5 (nói bằng thừa nhỉ các anh là dân trong nghề .mà.).. ở đấy em đưa ra một ví dụ cụ thể và yêu cầu của code cũng như lần trước thôi nhưng rõ hơn.. các anh nhớ để tâm cho em nhé !..
    -nói thiệt cái em đang làm để phục vụ cho cái chương trình chạy mạch quang báo.. mạch này là những bẳng hiện kí tự mà các anh hay thấy ở ngân hàng hay sân bay... những chuỗi bits này sẽ làm cho cái bảng ấy sáng tối ở những điểm mong mún trên cái bảng quang báo ( bit 0 - điểm sáng ,bit 1 -điểm tối .. hoặc ngược lại..tùy vào người thiết kế)..việc xuất ra các chuỗi này với tốc độ cao sẽ đánh lừa mắt người tưởng là các kí tự được sáng liên tục và chạy..từ trái qua phải vv...
    có lẽ nhờ lần này mà em lại bít thêm chút ít về C.. thanks again 2 anh ..langman và thinglv
    Attached Files Attached Files

  8. #8
    Ngày gia nhập
    04 2009
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi thinhlv Xem bài viết
    Hi beiudientu.
    Để có thể lấy ra từng byte một theo kiểu dịch một cái khung có kích thước 1 byte từ trái sang phải mảng gốc như bạn đã mô tả, mình gợi ý bạn làm như sau:
    PHP Code:
    //pData la mảng dữ liệu của bạn, n là số phần tử của mảng
    //Hàm DisplayView sẽ hiển thị toàn bộ khung nhìn của bạn ra màn hình.
    void DisplayView(bytepDataint n)
    {
        if((
    pData == '\0') || (<= 0))    
        {
            
    printf("Data incorrect");
            return;
        }
        
    byte viewer pData[0];
        
    printf("%s"viewer);//Hien thi khung nhin dau tien
        
    for(int i 1ni++){
                    
    //Nếu là dữ liệu đầu vào pData kiểu mảng 2byte thì phải cho lặp từ j = 15. Tương tự cho các kiểu dữ liệu khác
            
    for(int j 7>= 1j++)
            {
                
    viewer = (viewer << 1) + GetBit(pData[i], j);
                
    printf("%s"viewer);//Hien thi khung nhin tiep theo;
            
    }
        }
    }
    //Lấy ra giá trị bit (0 hay 1) ở vị trí chỉ định trong 1 byte
    byte GetBit(byte databyte index)
    {
        return ((
    data >> index) & 0x01);

    đọc kĩ nội quy hộ cái nha - langman
    em xem cái code của anh @ thinglv rùi..đúng như anh langman nói cool ra phết nhưng có chút xúi phát sinh là trong cái chương trình thực hiện viết và dịch ra file hex của em thì nó không hiểu cái hàm Getbit theo như em hiểu thì nó có khả năng lấy ra một bit có vị trí j trong một phần tử của mảng.....
    - nếu vậy mình có thể thay hàm GetBit bằng đoạn code nào không anh .!

Các đề tài tương tự

  1. Nữ giáo viên xinh như thiên thần che đạn cho học sinh trong vụ thảm sát
    Gửi bởi ttsdung1388 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-12-2012, 03:36 AM
  2. Làm Chữ chạy trên form C# như thẻ <marquee> trong HTML thế nào?
    Gửi bởi magnet241 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 05-04-2012, 11:55 AM
  3. In thẻ,hóa đơn từ các textbox,combobox,datetimepicker trong form C# như thế nào?
    Gửi bởi snoit trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 04-04-2012, 03:13 PM
  4. Sử lí như thế nào khi nhập rất chậm trong trình xoạn thảo trong devC
    Gửi bởi toansvcn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 23-05-2011, 10:04 PM
  5. Thao tác với XML Schema trong Visual Studio 2008 như thế nào?
    Gửi bởi napoleonit76 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 08-12-2009, 05:34 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn