解码
为什么letter可以变成数字(代码如下)#include <stdio.h>
void sperated(int decrypted,int *letter1,int *letter2)
{
*letter1 = decrypted >> 8;
*letter2 = decrypted & 255;
}
int main()
{
int encrypted_message = {15643, 6913, 6916, 23040, 2377, 6985, 6408, 3657, 5638,
3084, 2119, 15910, 23079, 13629, 23101, 10300, 10557,
23073, 13092, 23369};
int i,letter1,letter2;
for(i = 0;i < 20;i++)
{
int decrypted;
decrypted = encrypted_message ^ 31337;
sperated(decrypted,&letter1,&letter2);
printf("%c%c",letter1,letter2);
}
return 0;
} 这段代码中,将字母转换成数字的操作实际上是通过位运算来实现的。
在函数sperated中,通过位运算符“>>”和“&”将一个16位整数decrypted拆分成两个8位的数字letter1和letter2。
具体操作如下:
- 使用“>>”运算符,将decrypted右移8位,将高8位的字节提取出来。然后使用解引用符“*”将提取的结果赋值给letter1。
- 使用“&”运算符,将decrypted与255(即二进制的11111111)进行按位与运算,提取低8位的字节。然后使用解引用符“*”将提取的结果赋值给letter2。
在主函数main中,循环遍历数组encrypted_message,并将每个元素和31337(一个整数)进行异或运算得到解密后的消息。然后调用函数sperated将解密后的消息分割成两个8位的字节,分别打印出来。
所以,这段代码中并没有直接将字母转换成数字的过程,而是通过位运算将一个16位的整数拆分成两个8位的数字来表示字母。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]