Я хочу преобразовать массив Java char в массив байтов без создания промежуточного String
, так как массив char содержит пароль. Я просмотрел несколько методов, но все они, похоже, терпят неудачу:
char[] password = "password".toCharArray();
byte[] passwordBytes1 = new byte[password.length*2];
ByteBuffer.wrap(passwordBytes1).asCharBuffer().put(password);
byte[] passwordBytes2 = new byte[password.length*2];
for(int i=0; i<password.length; i++) {
passwordBytes2[2*i] = (byte) ((password[i]&0xFF00)>>8);
passwordBytes2[2*i+1] = (byte) (password[i]&0x00FF);
}
String passwordAsString = new String(password);
String passwordBytes1AsString = new String(passwordBytes1);
String passwordBytes2AsString = new String(passwordBytes2);
System.out.println(passwordAsString);
System.out.println(passwordBytes1AsString);
System.out.println(passwordBytes2AsString);
assertTrue(passwordAsString.equals(passwordBytes1) || passwordAsString.equals(passwordBytes2));
Утверждение всегда терпит неудачу (и, критически, когда код используется в процессе производства, пароль отклоняется), но заявления печати распечатывают пароль три раза. Почему passwordBytes1AsString
и passwordBytes2AsString
отличаются от passwordAsString
, но кажутся идентичными? Я пропускаю нулевой терминатор или что-то еще? Что я могу сделать, чтобы сделать преобразование и отмену работы?