如何将8位转换为16位?

时间:2013-11-17 21:19:53

标签: java

我正在尝试将字符串转换为1和0,相当于String的每个字符的ASCII值,它是一种编码。我的代码给了我8位结果,我需要每个字符的16位结果,例如如果我的输入字符串是1A,那么我得到0011000101000001但是期望的输出是00000000001100010000000001000001。我想要有8个额外的零来使它成为16位代码。 我不认为使用任何第三方方法。请提出如何使其成为16位的建议。还分享您对是否可以将16位解码回1A

的看法
  try(FileReader f=new FileReader(myFile)) 
    {

      int i;
      while((i=f.read())!=-1)
      {
      char c = (char)i;
      String s = Character.toString(c);

      byte[] bytes= s.getBytes();
      StringBuilder binary = new StringBuilder();

      for (byte b : bytes)
      {
         int val = b;
         for (int k = 0; k < 8; k++)
         {
            binary.append((val & 128) == 0 ? 0 : 1);
            val <<= 1;
         }
      }
      System.out.print(binary);
  }
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

2 个答案:

答案 0 :(得分:2)

您似乎希望使用UTF-16编码的字符代替UTF-8的(可能)默认值。所以,只需改变这一行

byte[] bytes= s.getBytes();

byte[] bytes= s.getBytes("UTF-16BE");

答案 1 :(得分:0)

for (byte b : bytes)
{
    int val = b;
    for (int k = 0; k < 8; k++) binary.append(0);
    for (int k = 0; k < 8; k++)
    {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
    }
}