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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值