2017-02-07 14 views
-2

下記のスクリーンショットのように、Javaで16進数(16進数)のXor計算をプログラミングするには?最初の入力はキー、2番目の入力は文字列、3番目の入力は出力です。実際に私はたくさんのスクリプトを試してみましたが、私はその問題を探検しましたが、結果はこの計算機のようには現実的ではありません。助けてください。 Online Xor CalculatorWindows programmer mode calculatorプログラミング方法Java計算機のXOR計算機の16進数16?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ImageView sharecode = (ImageView) findViewById(R.id.sharecode); 
    final TextView finalcode = (TextView) findViewById(R.id.tvfinalcode); 
    final Button calculatcode = (Button) findViewById(R.id.btncalculatcode); 
    final EditText tbpin = (EditText) findViewById(R.id.etPin); 
    final EditText tbappcode = (EditText) findViewById(R.id.etappcode); 
    tbappcode.setFilters(new InputFilter[]{new InputFilter.AllCaps()}); 


    sharecode.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if (finalcode.getText().equals("")) { 
       Toast.makeText(MainActivity.this, "There is no code to share it!", Toast.LENGTH_LONG).show(); 
      } else { 
       Intent sendIntent = new Intent(); 
       sendIntent.setAction(Intent.ACTION_SEND); 
       sendIntent.putExtra(Intent.EXTRA_TEXT, "Application Code is:" + finalcode.toString()); 
       sendIntent.setType("text/plain"); 
       startActivity(sendIntent); 
      } 

     } 
    }); 

    calculatcode.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     if (tbpin.getText().toString().equals("")) { 
      Toast.makeText(MainActivity.this, "Please Enter PIN Code!", Toast.LENGTH_LONG).show(); 
      } else if (tbappcode.getText().toString().equals("")) { 
      Toast.makeText(MainActivity.this, "Please Enter Last part of Appcode Code!", Toast.LENGTH_LONG).show(); 

      } else { 

       String a = tbappcode.getText().toString(); 
       String b = tbpin.getText().toString(); 

      int[] encrypted = encrypt(a, b); 
       for (int i = 0; i < encrypted.length; i++) 

       finalcode.setText(decrypt(encrypted, b)); 

        } 

       } 
      } 
    ); 

} 

private static int[] encrypt(String str, String key) { 
    int[] output = new int[str.length()]; 
    for (int i = 0; i < str.length(); i++) { 
     int o = (Integer.valueOf(str.charAt(i))^Integer.valueOf(key.charAt(i % (key.length() - 1)))) + '0'; 
     output[i] = o; 
    } 
    return output; 
} 

private static String decrypt(int[] input, String key) { 
    String output = ""; 
    for (int i = 0; i < input.length; i++) { 
     output += (char) ((input[i] - 48)^(int) key.charAt(i % (key.length() - 1))); 
    } 
    return output; 
} 
+0

コードはどこですか? –

+0

[mcve]を投稿して、あなたが得ている出力を表示してください。 「うまくいかない」とは、何が起こっているのかについての十分な説明ではありません。 –

+0

結果は添付された画像に似ているはずです。 –

答えて

0

int型またはlong型の文字列を分割する必要があります。 16base番号を持つとき、この番号を2baseに変更する必要があります。 たとえば、(あなたの写真の中で): 最初の入力の最後の番号は2で、2番目の入力の最後の番号はbです。バイナリで

2 - バイナリで0010

B - のXOR 1011

結果(!第1入力の場合= secondInput)1001、これは絵のように9です。

文字列を分割し、1桁を取得し、16進数に変換し、2番目の文字列でこれを行い、XORバイナリ演算子^を使用する必要があります。

int[] firstInput ={1,9,4,2,1,9,4,2}; 
int[] secondInput ={3,1,6,a,b,2,c,b}; 
int[] output = new int[8]; 
for(i=0;i<firstInput.length();i++){ 
    output[i]=firstInput[i]^secondInput[i]; 
} 

これは非常に単純で部分的なコードのサンプルです。 XoRの操作は^演算子です。

0

計算上の下記をご覧になってください。

public static void main(String[] args) throws FileNotFoundException { 
    int i = 0x316AB2CB; 
    int j = 0x19421942; 

    int res = i^j; 
    System.out.printf("Hex: %x\n", res); 
    System.out.printf("Octal: %o\n", res); 
    System.out.printf("Decimal: %d\n", res); 
} 

あなたは常に結果を印刷するに興味がないかもしれないとして、あなたはFormatterを見てみましょうことがあります。