適用於byte數組某一位上數值高效處理的函數

在處理byte(unsigned char) 數組過程中,有時會遇到需要改變數組某一位的問題,或者需要讀取數組中某一位的值,這種處理在實現安全算法中比較常見,如DES和AES,所以在這裏將兩個實用的小函數分享一下。

1. 將byte數組dataddr的位於pos位置的數值改爲b0:

首先將pos轉換爲在數組中的具體位置byte_count和bit_count,注意這裏的pos是從1開始數的。然後用位運算將temp調整到目標位置,最後根據要修改的目標值b0,對dataddr目標位置值進行修改。

static void setbit(byte* dataddr,int pos,int b0){

byte  byte_count;
byte  bit_count;
byte  temp;


temp = 1;

byte_count = (pos - 1) / 8;
bit_count = 7 - ((pos - 1) % 8);
temp <<= bit_count;

if(b0)
dataddr[byte_count] |= temp;
else{
temp = ~temp;
dataddr[byte_count] &= temp;
}

}


2. 讀取byte數組dataddr的位於pos位置的數值:

與setbit相似,先將pos轉換爲數組中的位置,然後對目標位運算的變量temp進行相應的位處理,最後利用&讀取目標位置的值作爲返回值。

static int getbit(byte* dataddr,int pos){
byte  byte_count;
byte  bit_count;
byte  temp;


temp = 1;
byte_count = (pos - 1) / 8;
bit_count = 7 - ((pos - 1) % 8);
temp <<= bit_count;

if(dataddr[byte_count] & temp)
return 1;
else
return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章