private int PNToAscii(String recieved)
	{
		// split the recieved code into 2 parts
		String[] recieveds = new String[] {
				recieved.substring(0, 8),
				recieved.substring(8, 16)
		};
		
		// decode each part and join them to get the result byte
		StringBuffer decoded = new StringBuffer();
		for (String recievedi : recieveds) {
			String info = recievedi.substring(0, 4);
			String check = recievedi.substring(4, 8);
			String test;
			
			// obtain test according to #one of info
			if(CountOne(info) % 2 == 1)
			{
				test = AddByBit(info, check);
			}
			else
			{
				test = Complement(AddByBit(info, check));
			}
			
			// choose to trust info or check according to #one of test
			if(CountOne(test) < 2)
			{
				decoded.append(info);
			}
			else
			{
				if(CountOne(info) % 2 == 1)
				{
					decoded.append(Complement(check));
				}
				else
				{
					decoded.append(check);
				}
			}
		}
		
		int ascii = Integer.parseInt(decoded.toString(), 2);
		return ascii;
	}