【发布时间】:2014-01-25 17:02:14
【问题描述】:
我正在实施 DES(与 EBC)作为学校工作的一部分。我正在为块使用来自<stdbool.h> 的布尔数组bool[64]。该数组为每个位使用 1 个字节(当我尝试 memcpy 用于 64bits=8 字节而不是 64 字节时,我很难学到这一点)。无论如何,如何进入位数组?现在,我正在读入一个无符号长整数并将其转换。如下:
unsigned long buf;
bool I[64], O[64];
int ctr = 0;
while((ctr = fread(&buf, 1, 8, fin))>0) {
dectobin(buf, I);
encrypt(I, O);
buf=bintodec(O);
fwrite(&buf, 8, 1, fout);
buf = 0;
}
功能是:
void dectobin(unsigned long dec, bool bin[64])
{
int i;
for(i = 0; i< 64; i++)
bin[i] = (dec>>(63-i)) & 1;
}
unsigned long bintodec(bool bin[64])
{
unsigned long dec = 0;
int i;
for(i = 0; i < 64; i++) {
dec <<= 1;
dec |= (int)(bin[i]);
}
return dec;
}
有没有更好的方法来做到这一点?
【问题讨论】: