C語言bitmap的使用技巧


bitmap是一種以位的狀態來表示某種特性的狀態的一種操作方式,類似嵌入式中的寄存器操作,在表示某種特性enable/disable的時候很適用且占用的內存空間也很小

比如:做過交換機或者企業網管,路由器的人可能都知道vlan這個概念,vlan域分為0-4095共4096個vlan,我們在端口下設置vlan的時候,就需要一個機制來記錄vlan設置與否,

這個就是bitmap; 假設目前設置的vlan為vlan_x,那么我們是這個操作的:

  1.首先定義一個128*4的空間(用的32位機器)

    int bitmap_vlan[128];

    memset(bitmap_vlan, 0, sizeof(bitmap_vlan));

  2.設置bit位

    bitmap_vlan[vlan_x / 32] | (0x1 << (vlan_x %32))

如果需要檢查某個vlan是否設置了,那么只需要這樣做:

    if ( bitmap_vlan[vlan_x / 32] & (0x1 << (vlan_x % 32)) )

相信C語言比較熟練的人很容易就看懂了,bitmap_vlan共有128個元素,每個元素占4個字節,就是32bit,128*32那就是4096個bit,每個bit能表示一個vlan值。這個以vlan的設置來拋磚引玉,

在實際開發中,很多地方都可以用到bitmap,作為一個C開發,怎能不會bitmap這種操作技巧呢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM