gpt4 book ai didi

c - `*p+++c&63` 在 C++ 中是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 17:02:48 25 4
gpt4 key购买 nike

我是 Hitman 的粉丝一款潜行暗杀类游戏。

在最新挑战的电影中,我发现了 following code-like snippet .我没有 C++ 经验,也没有在我的系统上安装 C 工具,所以我尝试将它复制到 REPL here , 但始终出现错误*

这是我对代码的转录:

#include<stdio.h>
void main(int,char**a){for(char*p="25YZ[<TT];SR^2]W+%'C^,X-0?0&__V[!;TT];D+ #.A3,A+ 4C,$!_.",c=a[1][0];*p;putc(c=(*p+++c&63)+32,stdout));}

(在本文后面重新格式化以提高可读性)。

据我所知,这应该是一个密码(“获取 cipher 的每个字符,通过转换传递它,然后打印出来”),但我都无法得到这无法执行,也无法充分理解以将其翻译成我知道的语言,例如 Python:我知道 *p+++c&63 是什么意思。我的猜测是它应该分解如下:

  • *p++ - 获取 *p 的下一个字符...
  • + - ...并将其(整数表示)添加到...
  • c - ...c 的先前设置值(来自循环的前一次迭代,或来自初始化为 c=a[ 1][0])...
  • &63 - ...做某事?看起来像 bit-wise operator
  • +32 - 将 32 添加到结果中

此外,a 的初始值似乎是解密 key - 但我已经搜索了视频的其余部分,但找不到任何关于它的含义的提示。

我尝试将其转换为 Python(遍历所有字母和数字作为键),如下所示:

import string

cipher = "25YZ[<TT];SR^2]W+%'C^,X-0?0&__V[!;TT];D+ #.A3,A+ 4C,$!_."

def printout(c):
plaintext = ""
for p in cipher:
c = chr(ord(p) + ((ord(c) & 63)) + 32)
plaintext += c
print(plaintext)

for c in string.letters + string.digits:
printout(c)

但结果输出的每一行大部分都是垃圾。

我错过了什么?我是否将 (C++) c=(*p+++c&63)+32 错误翻译为 (Python) c = chr(ord(p) + ((ord(c) & 63) ) + 32)(在 for 循环中,将 p 推进到下一个字符),还是我只需要将我的网络撒得更广一些以获得解密 key ?


为了可读性稍微重新格式化了原始代码:

#include<stdio.h>
void main(int,char**a) {
for(
char*p="25YZ[<TT];SR^2]W+%'C^,X-0?0&__V[!;TT];D+ #.A3,A+ 4C,$!_.",
c=a[1][0];
*p;
putc(c=(*p+++c&63)+32,stdout)
);}

* 包括但不限于 main 应该返回 int 的错误,以及 ISO C++11 不允许从字符串文字转换的错误到 'char *'

最佳答案

What does *p+++c&63 mean in C++?

  1. p++后缀增量。增量指针 p到下一个字符;结果是递增前的指针值。
  2. *p++间接的。通过表达式 1 的指针结果间接寻址。结果是 p 的字符。最初指向的是'2' .
  3. *p+++c添加。添加 2. 和 c 的结果.与 *p++ + c 相同
  4. *p+++c&63按位和。左手操作数是 3 的结果。右手操作符是整数文字。

带有完整的括号和合理的间距:(*(p++) + c) & 63


这是一个格式化的、格式正确的版本,不会产生任何警告:

#include <stdio.h>

int main(int, char**a) {
const char* p = "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_.";
for(char c = a[1][0];
*p;
putc(c=((*p++ + c) & 63) + 32, stdout));
}

字符串 "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_."可能是加密文本。如果给定 key 作为参数,程序将解密它。第一个参数的第一个字符用作键。

一个暴力破解 key 的程序:


#include <stdio.h>
int main() {
for (char i = 0; i < 127; i++) {
const char* p = "25YZ[<TT];SR^2]W+%'C^,X-O?O&__V[!;TT];D+ #.A3,A+ 4C,$!_.";
printf("%c: ", i);
for(char c = i;
*p;
putc(c=((*p++ + c) & 63) + 32, stdout));
putc('\n', stdout);
}
}


What am I missing?

  1. 运算符顺序 2. 您假设 key 是字母数字。

关于c - `*p+++c&63` 在 C++ 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com