【发布时间】:2016-07-04 07:47:22
【问题描述】:
我正在用我购买的一些教科书自学 c。一般来说,这很容易,但我不太容易掌握的一个领域与位操作有关。我理解运算符在字面(孤立)意义上的使用,但不太了解它们在下面的特定上下文中如何应用。
下面有 2 个这样的示例,我无法理解它们在某些解密算法的上下文中是如何/做什么的。
我正在寻找的只是对十六进制和位移/左右将一起做什么的解释。
我在网上浏览的大多数示例都是孤立的,到目前为止还没有深入了解它们是如何在这种情况下应用的。
如果有任何人都可以推荐的特定于位操作/操作的教科书,我也愿意投资于此类信息。这就是我真正确定这一点的决心(我讨厌在没有完全掌握的情况下继续前进)。
unsigned long lBits = 0;
lBits = ((unsigned long)(key[28] & 0xFFFF)<< 24)|
((unsigned long)(key[29] & 0xFFFF)<< 16)|
((unsigned long)(key[30] & 0xFFFF)<< 8)|
((unsigned long)(key[31] & 0xFFFF));
...
for(i=0; i < max_length ; i++){
unsigned long tBits = lBits | i;
tkey[28] = (unsigned char) (tBits >> 24);
tkey[29] = (unsigned char) (tBits >> 16);
tkey[30] = (unsigned char) (tBits >> 8);
tkey[31] = (unsigned char) (tBits);
【问题讨论】:
-
你没有提供
key和tkey的声明。 -
是的,我希望减少我发布的代码量,因为示例很长。 key 是通过命令行传入的 char 数组 arg,它是 32 位密钥的一部分,tkey 是相同的密钥,用 0 填充以满足 32 位长度。
-
它是
unsigned char数组,还是只是char? -
无符号字符密钥,tkey;
标签: c encryption bit-manipulation