我想将Java char数组转换为byte数组,而不创建中间的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 不同,但看起来相同?我是否遗漏了空终止符或其他内容?我该如何使转换和反转换正常工作?