适用于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;

}

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