在C相关语言中,不同字节数之间的转换涉及到的是位运算符&、|以及移位符<<和>>,但是Matlab中将使用到两种函数:bitshift(A,k)和bitand()、bitor(),下面进行实例演示。
for j=1:LL
temp=ZS(b*(j-1)+1);
for k=(b*(j-1)+1):(b*j-1)
temp=bitshift(temp,8);
T(j)=bitor(temp,ZS(k+1));
end
end
在该代码块中,目的是合并一个一维数组中相邻b个单字节的值为一整个b字节值,因此对于移位和或运算采用循环计算,其中temp暂存上一次移位后的值。
在b个单字节值向一个b字节值转换的过程中,对第一个8字节数先进行左移8位操作,然后再将第二个数和移位后的数进行或运算(0|0=0,0|1=1,1|0=1,1|1=1),之后以此类推。
一个b字节值拆分为b个单字节值的情况类似,但是此处也可以使用另一个方法,即利用函数bitget()得到每8位值,再将得到的每8位值数组表示的二进制数转化为十进制数,实例代码如下。
for x=1:n
for r=1:m
%r为第r个b字节值
%分离b字节值中的每个字节
j=b;%从高位到低位依次取出每个字节值
for numb=(1+b*(r-1)):b*r
%numb对应分离出来的单字节值的位置
if(j>=1)
temp=bitget(shadow(x,r),j*8:-1:((j-1)*8+1));
%tranche矩阵记录每个参与者份额划分出来的单字节值
%一列为一个参与者,行为该参与者的一个单字节值
tranche(x,numb)=0;
for count=(length(temp)-1):-1:0
tranche(x,numb)=
power(2,count)*temp(length(temp)-count)+tranche(x,numb);
end
else
break;
end
j=j-1;
end
end
end
只不过这个反向转换的过程可能在性能上太慢了。