我有一个char []向量,表示位图,我想将其转换为整数向量,其中char数组中的第n位对应于整数数组中的第n个条目。
我只能想到这样做: 遍历每个字节,然后"提取第n位"每次。这很简单,但似乎不必要地慢。
我可以想到一些优化,如果我使用"<<"并检查该字节的其余部分是否为0,我可以跳过几个条目,但这不会增加太多,因为我希望我的矢量密集。
关于如何提高效率的任何想法
由于
答案 0 :(得分:0)
我认为通过检查查看char是否正在迭代是< 2 ^ i我正在检查的位是你接近问题的下限。
在下面的代码中,我使用(1<< j)等于2 ^ j和&是按位和运算符,它将检查该索引处的位的值是1还是0。
考虑到字节的长度是恒定的,这在线性时间内运行。
int i;
for(i=0;i<sizeof charVector;i++){
int j;
for(j=0;j<8;j++){
if (charVector[i]< (1 << j)){
break;
} else {
intVector[i*8 + j] = charVector[i] & (1 << j);
}
}
}