百科问答小站 logo
百科问答小站 font logo



美剧《硅谷》第三季第一集神秘代码写的是什么? 第1页

  

user avatar   simonxia-OMG 网友的相关建议: 
      

试了一下,运行结果如红框所示,第一反应是HBO的编剧也是蛮拼的。。。

这是一段花式输出字符串的程序,源代码被黑科技玩坏了

原理其实很简单,我们注意到代码中有个特别的 magic number 是65,没错,那就是ASCII 表里的 A,前面那一堆不过是在叠加偏移量,以此来实现输出。

具体地说,偏移量的计算是用 0x1FULL 这个无符号长整型常量作为掩码(二进制表示为 11111),从低位开始每次从

       0x79481E6BBCC01223 + ((dcf_t)0x1222DC << 64)      

这个大整数中取出 5 位,所取出的 5 位二进制表示即为偏移量。

我们用同样的 trick 可以输出任意想要的字符串。比如:

       #include <stdio.h> #include <stdlib.h>  typedef unsigned long u64;  typedef void enc_cfg_t; typedef int enc_cfg2_t; typedef __int128_t dcf_t;  enc_cfg_t _ctx_iface(dcf_t s, enc_cfg2_t i){  int c = (((s & ((dcf_t)0x1FULL << i * 5)) >> i * 5) + 65);  printf("%c", c);}          enc_cfg2_t main() {  for (int i=0; i<10; i++){   _ctx_iface(0x28EC789572FC8 + ((dcf_t)0x000000 << 64), i);  } }      

将得到:



摸清了套路,我们也成了老司机,甚至可以写一段程序来生成这段看起来很黑科技的代码。

gen.c

       #include <stdio.h> #include <string.h>  #define MAX_LEN 25 // 128 的位整数最多用此方法可以存放25个字符  const char *text = "#include <stdio.h>
#include <stdlib.h>

typedef unsigned long u64;

typedef void enc_cfg_t;
typedef int enc_cfg2_t;
typedef __int128_t dcf_t;

enc_cfg_t _ctx_iface(dcf_t s, enc_cfg2_t i){
	int c = (((s & ((dcf_t)0x1FULL << i * 5)) >> i * 5) + 65);
	printf("%%c", c);}
	enc_cfg2_t main() {
	for (int i=0; i<%d; i++){
		 _ctx_iface(0x%llX + ((dcf_t)0x%X << 64), i);
	}
}
";   int main() {  char input[MAX_LEN];  memset(input, 0x00, sizeof(char)*MAX_LEN);  if (fgets(input, MAX_LEN, stdin) == NULL) {   printf("fail to read input
");   return -1;  }   unsigned long long mask1 = 0;  __int128_t mask2 = 0;  int i;  for (i = 0; input[i] != '
' && i < MAX_LEN; i++) {   if (i < 12) {    mask1 |= (unsigned long long)(((input[i] - 'A') & 0x1F)) << i*5;   } else if (i == 12) {    mask1 |= (unsigned long long)(((input[i] - 'A') & 0xF)) << i*5;    mask2 |= ((input[i] - 'A') & 0x10) >> 4;   }else{    mask2 |= (unsigned long long)(((input[i] - 'A') & 0x1F)) << (i-13)*5+1;   }  }  printf(text, i, mask1, mask2); }      


现在用这段程序,我们可以随意发挥了




  

相关话题

  为什么《黑色孤儿》这么好的剧好像看的人很少? 
  有什么理论复杂但是实现简单的算法? 
  中国的软件业落后美国 50 年吗? 
  哪一句台词,让你记住了整部电影? 
  如何看待谷歌工程师透露谷歌有20亿行代码,相当于写40遍Windows? 
  现在的人工智能水平,能代替程序员写代码吗?如果有一天能写代码,是否会促使它发展自己的思维? 
  “C++”读作「C 加加」,为什么“C#”不能读作「C 井」呢? 
  如何用 C 语言画「心形」? 
  C/C++ 数组大小需要是2的倍数吗? 
  为什么技术主管跟我说程序员学算法不是最重要的,从工作项目中学习实际才是最重要的? 

前一个讨论
能否推荐几个界面好看的个人网页设计?
下一个讨论
如何评价美剧《硅谷》?





© 2025-03-24 - tinynew.org. All Rights Reserved.
© 2025-03-24 - tinynew.org. 保留所有权利