⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g3sdecod.c

📁 图形加密的算法 用c语言实现 【解压没有密码】
💻 C
📖 第 1 页 / 共 2 页
字号:
			}
		      }
		      else /* 0000 0010 100... */
		      {
			if (next_bit ()) /* 0000 0010 1001... */
			{
			  if (next_bit ()) /* 0000 0010 1001 1 */ return (1344);
			  else /* 0000 0010 1001 0 */ return (1280);
			}
			else /* 0000 0010 1000 */ return (56);
		      }
		    }
		  }
		  else /* 0000 0010 0... */
		  {
		    if (next_bit ()) /* 0000 0010 01... */
		    {
		      if (next_bit ()) /* 0000 0010 011... */
		      {
			if (next_bit ()) /* 0000 0010 0111 */ return (55);
			else /* 0000 0010 0110... */
			{
			  if (next_bit ()) /* 0000 0010 0110 1 */ return (832);
			  else /* 0000 0010 0110 0 */ return (768);
			}
		      }
		      else /* 0000 0010 010... */
		      {
			if (next_bit ()) /* 0000 0010 0101... */
			{
			  if (next_bit ()) /* 0000 0010 0101 1 */ return (704);
			  else /* 0000 0010 0101 0 */ return (640);
			}
			else /* 0000 0010 0100 */ return (52);
		      }
		    }
		    else /* 0000 0010 00 */ return (18);
		  }
		}
	      }
	      else /* 0000 000... */
	      {
		if (next_bit ()) /* 0000 0001... */
		{
		  if (next_bit ()) /* 0000 0001 1... */
		  {
		    if (next_bit ()) /* 0000 0001 11... */
		    {
		      if (next_bit ()) /* 0000 0001 111... */
		      {
			if (next_bit ()) /* 0000 0001 1111 */ return (2560);
			else /* 0000 0001 1110 */ return (2496);
		      }
		      else /* 0000 0001 110... */
		      {
			if (next_bit ()) /* 0000 0001 1101 */ return (2432);
			else /* 0000 0001 1100 */ return (2368);
		      }
		    }
		    else /* 0000 0001 10... */
		    {
		      if (next_bit ()) /* 0000 0001 101 */ return (1920);
		      else /* 0000 0001 100 */ return (1856);
		    }
		  }
		  else /* 0000 0001 0... */
		  {
		    if (next_bit ()) /* 0000 0001 01... */
		    {
		      if (next_bit ()) /* 0000 0001 011... */
		      {
			if (next_bit ()) /* 0000 0001 0111 */ return (2304);
			else /* 0000 0001 0110 */ return (2240);
		      }
		      else /* 0000 0001 010... */
		      {
			if (next_bit ()) /* 0000 0001 0101 */ return (2176);
			else /* 0000 0001 0100 */ return (2112);
		      }
		    }
		    else /* 0000 0001 00... */
		    {
		      if (next_bit ()) /* 0000 0001 001... */
		      {
			if (next_bit ()) /* 0000 0001 0011 */ return (2048);
			else /* 0000 0001 0010 */ return (1984);
		      }
		      else /* 0000 0001 000 */ return (1792);
		    }
		  }
		}
		else /* 0000 0000... */
		{
		  if (next_bit ()) /* 0000 0000 1 */ return (INVALID_CODE);
		  else /* 0000 0000 0... */
		  {
		    if (next_bit ()) /* 0000 0000 01 */ return (INVALID_CODE);
		    else /* 0000 0000 00... */
		    {
		      if (next_bit ()) /* 0000 0000 001 */
							return (INVALID_CODE);
		      else /* 0000 0000 000... */
		      {
			if (next_bit ()) /* 0000 0000 0001 */ return (EOL_CODE);
			else /* 0000 0000 0000 */ /* return (INVALID_CODE); */
			  /* normally this is an invalid code, but *if* we
				assume the file has no errors, then we can
				greatly simplify pad stripping with the
				following... */
			  for (;;) if (next_bit ()) return (EOL_CODE);
		      }
		    }
		  }
		}
	      }
	    }
	  }
	}
      }
    }
  }
}

/*
 *	return the length of the next run, assumed to be white 
 */

static short decode_white_run ()
{
  short cumulative = 0, code_value;
  for (;;)
  {
    code_value = decode_white_word ();
    cumulative += code_value;
    if (code_value < 0) return (code_value);
    if (code_value < 64) return (cumulative);
  }
}

static short decode_white_word ()
{
  if (next_bit ()) /* 1... */
  {
    if (next_bit ()) /* 11... */
    {
      if (next_bit ()) /* 111... */
      {
	if (next_bit ()) /* 1111 */ return (7);
	else /* 1110 */ return (6);
      }
      else /* 110... */
      {
	if (next_bit ()) /* 1101... */
	{
	  if (next_bit ()) /* 1101 1 */ return (64);
	  else /* 1101 0... */
	  {
	    if (next_bit ()) /* 1101 01 */ return (15);
	    else /* 1101 00 */ return (14);
	  }
	}
	else /* 1100 */ return (5);
      }
    }
    else /* 10... */
    {
      if (next_bit ()) /* 101... */
      {
	if (next_bit ()) /* 1011 */ return (4);
	else /* 1010... */
	{
	  if (next_bit ()) /* 10101... */
	  {
	    if (next_bit ()) /* 101011 */ return (17);
	    else /* 101010 */ return (16);
	  }
	  else /* 10100 */ return (9);
	}
      }
      else /* 100... */
      {
	if (next_bit ()) /* 1001... */
	{
	  if (next_bit ()) /* 10011 */ return (8);
	  else /* 10010 */ return (128);
	}
	else /* 1000 */ return (3);
      }
    }
  }
  else /* 0... */
  {
    if (next_bit ()) /* 01... */
    {
      if (next_bit ()) /* 011... */
      {
	if (next_bit ()) /* 0111 */ return (2);
	else /* 0110... */
	{
	  if (next_bit ()) /* 01101... */
	  {
	    if (next_bit ()) /* 011011... */
	    {
	      if (next_bit ()) /* 0110111 */ return (256);
	      else /* 0110110... */
	      {
		if (next_bit ()) /* 01101101... */
		{
		  if (next_bit ()) /* 011011011 */ return (1408);
		  else /* 011011010 */ return (1344);
		}
	        else /* 01101100... */
		{
		  if (next_bit ()) /* 011011001 */ return (1280);
		  else /* 011011000 */ return (1216);
		}
	      }
	    }
	    else /* 011010... */
	    {
	      if (next_bit ()) /* 0110101... */
	      {
		if (next_bit ()) /* 01101011... */
		{
		  if (next_bit ()) /* 011010111 */ return (1152);
		  else /* 011010110 */ return (1088);
		}
		else /* 01101010... */
		{
		  if (next_bit ()) /* 011010101 */ return (1024);
		  else /* 011010100 */ return (960);
		}
	      }
	      else /* 0110100... */
	      {
		if (next_bit ()) /* 01101001... */
		{
		  if (next_bit ()) /* 011010011 */ return (896);
		  else /* 011010010 */ return (832);
		}
		else /* 01101000 */ return (576);
	      }
	    }
	  }
	  else /* 01100... */
	  {
	    if (next_bit ()) /* 011001... */
	    {
	      if (next_bit ()) /* 0110011... */
	      {
		if (next_bit ()) /* 01100111 */ return (640);
		else /* 01100110 */
		{
		  if (next_bit ()) /* 011001101 */ return (768);
		  else /* 011001100 */ return (704);
		}
	      }
	      else /* 0110010 */
	      {
		if (next_bit ()) /* 01100101 */ return (512);
		else /* 01100100 */ return (448);
	      }
	    }
	    else /* 011000 */ return (1664);
	  }
	}
      }
      else /* 010... */
      {
	if (next_bit ()) /* 0101... */
	{
	  if (next_bit ()) /* 01011... */
	  {
	    if (next_bit ()) /* 010111 */ return (192);
	    else /* 010110... */
	    {
	      if (next_bit ()) /* 0101101... */
	      {
		if (next_bit ()) /* 01011011 */ return (58);
		else /* 01011010 */ return (57);
	      }
	      else /* 0101100... */
	      {
		if (next_bit ()) /* 01011001 */ return (56);
		else /* 01011000 */ return (55);
	      }
	    }
	  }
	  else /* 01010... */
	  {
	    if (next_bit ()) /* 010101... */
	    {
	      if (next_bit ()) /* 0101011 */ return (25);
	      else /* 0101010... */
	      {
		if (next_bit ()) /* 01010101 */ return (52);
		else /* 01010100 */ return (51);
	      }
	    }
	    else /* 010100... */
	    {
	      if (next_bit ()) /* 0101001... */
	      {
		if (next_bit ()) /* 01010011 */ return (50);
		else /* 01010010 */ return (49);
	      }
	      else /* 0101000 */ return (24);
	    }
	  }
	}
	else /* 0100... */
	{
	  if (next_bit ()) /* 01001... */
	  {
	    if (next_bit ()) /* 010011... */
	    {
	      if (next_bit ()) /* 0100111 */ return (18);
	      else /* 0100110... */
	      {
		if (next_bit ()) /* 01001101... */
		{
		  if (next_bit ()) /* 010011011 */ return (1728);
		  else /* 010011010 */ return (1600);
		}
		else /* 01001100... */
		{
		  if (next_bit ()) /* 010011001 */ return (1536);
		  else /* 010011000 */ return (1472);
		}
	      }
	    }
	    else /* 010010... */
	    {
	      if (next_bit ()) /* 0100101... */
	      {
		if (next_bit ()) /* 01001011 */ return (60);
		else /* 01001010 */ return (59);
	      }
	      else /* 0100100 */ return (27);
	    }
	  }
	  else /* 01000 */ return (11);
	}
      }
    }
    else /* 00... */
    {
      if (next_bit ()) /* 001... */
      {
	if (next_bit ()) /* 0011... */
	{
	  if (next_bit ()) /* 00111 */ return (10);
	  else /* 00110... */
	  {
	    if (next_bit ()) /* 001101... */
	    {
	      if (next_bit ()) /* 0011011... */
	      {
		if (next_bit ()) /* 00110111 */ return (384);
		else /* 00110110 */ return (320);
	      }
	      else /* 0011010... */
	      {
		if (next_bit ()) /* 00110101 */ return (0);
		else /* 00110100 */ return (63);
	      }
	    }
	    else /* 001100... */
	    {
	      if (next_bit ()) /* 0011001... */
	      {
		if (next_bit ()) /* 00110011 */ return (62);
		else /* 00110010 */ return (61);
	      }
	      else /* 0011000 */ return (28);
	    }
	  }
	}
	else /* 0010... */
	{
	  if (next_bit ()) /* 00101... */
	  {
	    if (next_bit ()) /* 001011... */
	    {
	      if (next_bit ()) /* 0010111 */ return (21);
	      else /* 0010110... */
	      {
		if (next_bit ()) /* 00101101 */ return (44);
		else /* 00101100 */ return (43);
	      }
	    }
	    else /* 001010... */
	    {
	      if (next_bit ()) /* 0010101... */
	      {
		if (next_bit ()) /* 00101011 */ return (42);
		else /* 00101010 */ return (41);
	      }
	      else /* 0010100... */
	      {
		if (next_bit ()) /* 00101001 */ return (40);
		else /* 00101000 */ return (39);
	      }
	    }
	  }
	  else /* 00100... */
	  {
	    if (next_bit ()) /* 001001... */
	    {
	      if (next_bit ()) /* 0010011 */ return (26);
	      else /* 0010010... */
	      {
		if (next_bit ()) /* 00100101 */ return (54);
		else /* 00100100 */ return (53);
	      }
	    }
	    else /* 001000 */ return (12);
	  }
	}
      }
      else /* 000... */
      {
	if (next_bit ()) /* 0001... */
	{
	  if (next_bit ()) /* 00011... */
	  {
	    if (next_bit ()) /* 000111 */ return (1);
	    else /* 000110... */
	    {
	      if (next_bit ()) /* 0001101... */
	      {
		if (next_bit ()) /* 00011011 */ return (32);
		else /* 00011010 */ return (31);
	      }
	      else /* 0001100 */ return (19);
	    }
	  }
	  else /* 00010... */
	  {
	    if (next_bit ()) /* 000101... */
	    {
	      if (next_bit ()) /* 0001011... */
	      {
		if (next_bit ()) /* 00010111 */ return (38);
		else /* 00010110 */ return (37);
	      }
	      else /* 0001010... */
	      {
		if (next_bit ()) /* 00010101 */ return (36);
		else /* 00010100 */ return (35);
	      }
	    }
	    else /* 000100... */
	    {
	      if (next_bit ()) /* 0001001... */
	      {
		if (next_bit ()) /* 00010011 */ return (34);
		else /* 00010010 */ return (33);
	      }
	      else /* 0001000 */ return (20);
	    }
	  }
	}
	else /* 0000... */
	{
	  if (next_bit ()) /* 00001... */
	  {
	    if (next_bit ()) /* 000011 */ return (13);
	    else /* 000010... */
	    {
	      if (next_bit ()) /* 0000101... */
	      {
		if (next_bit ()) /* 00001011 */ return (48);
		else /* 00001010 */ return (47);
	      }
	      else /* 0000100 */ return (23);
	    }
	  }
	  else /* 00000... */
	  {
	    if (next_bit ()) /* 000001... */
	    {
	      if (next_bit ()) /* 0000011 */ return (22);
	      else /* 0000010... */
	      {
		if (next_bit ()) /* 00000101 */ return (46);
		else /* 00000100 */ return (45);
	      }
	    }
	    else /* 000000... */
	    {
	      if (next_bit ()) /* 0000001... */
	      {
		if (next_bit ()) /* 00000011 */ return (30);
		else /* 00000010 */ return (29);
	      }
	      else /* 0000 000... */
	      {
		if (next_bit ()) /* 0000 0001... */
		{
		  if (next_bit ()) /* 0000 0001 1... */
		  {
		    if (next_bit ()) /* 0000 0001 11... */
		    {
		      if (next_bit ()) /* 0000 0001 111... */
		      {
			if (next_bit ()) /* 0000 0001 1111 */ return (2560);
			else /* 0000 0001 1110 */ return (2496);
		      }
		      else /* 0000 0001 110... */
		      {
			if (next_bit ()) /* 0000 0001 1101 */ return (2432);
			else /* 0000 0001 1100 */ return (2368);
		      }
		    }
		    else /* 0000 0001 10... */
		    {
		      if (next_bit ()) /* 0000 0001 101 */ return (1920);
		      else /* 0000 0001 100 */ return (1856);
		    }
		  }
		  else /* 0000 0001 0... */
		  {
		    if (next_bit ()) /* 0000 0001 01... */
		    {
		      if (next_bit ()) /* 0000 0001 011... */
		      {
			if (next_bit ()) /* 0000 0001 0111 */ return (2304);
			else /* 0000 0001 0110 */ return (2240);
		      }
		      else /* 0000 0001 010... */
		      {
			if (next_bit ()) /* 0000 0001 0101 */ return (2176);
			else /* 0000 0001 0100 */ return (2112);
		      }
		    }
		    else /* 0000 0001 00... */
		    {
		      if (next_bit ()) /* 0000 0001 001... */
		      {
			if (next_bit ()) /* 0000 0001 0011 */ return (2048);
			else /* 0000 0001 0010 */ return (1984);
		      }
		      else /* 0000 0001 000 */ return (1792);
		    }
		  }
		}
		else /* 0000 0000... */
		{
		  if (next_bit ()) /* 0000 0000 1 */ return (INVALID_CODE);
		  else /* 0000 0000 0... */
		  {
		    if (next_bit ()) /* 0000 0000 01 */ return (INVALID_CODE);
		    else /* 0000 0000 00... */
		    {
		      if (next_bit ()) /* 0000 0000 001 */
							return (INVALID_CODE);
		      else /* 0000 0000 000... */
		      {
			if (next_bit ()) /* 0000 0000 0001 */ return (EOL_CODE);
			else /* 0000 0000 0000 */ /* return (INVALID_CODE); */
			  /* normally this is an invalid code, but *if* we
				assume the file has no errors, then we can
				greatly simplify pad stripping with the
				following... */
			  for (;;) if (next_bit ()) return (EOL_CODE);
		      }
		    }
		  }
		}
	      }
	    }
	  }
	}
      }
    }
  }
}

/*	end $RCSfile: g3sdecod.c $ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -