1

我正在尝试制作 UUencode 算法,我的部分代码包含以下内容:

for(int x = 0; x < my_chars.length; x++)
{
   if((x+1) % 3 == 0)
   {
   char first = my_chars[x-2];
   char second = my_chars[x-1];
   char third = my_chars[x];
   int first_binary = Integer.parseInt(Integer.toBinaryString(first));
   int second_binary = Integer.parseInt(Integer.toBinaryString(second));
   int third_binary = Integer.parseInt(Integer.toBinaryString(third));
   int n = (((first << 8) | second) << 8) | third;
   System.out.print(my_chars[x-2] + "" + my_chars[x-1] + my_chars[x] + Integer.toBinaryString(n));

   }
}

System.out.println();
System.out.println(Integer.toBinaryString('s'));

我想要实现的是将我得到的字符中的 8 位组合成一个 24 位的大整数。我面临的问题是结果是 23 位 int。假设我的前 3 个字符是:

  • 'T' 的二进制表示01010100
  • 'u' 的二进制表示01110101
  • 'r' 的二进制表示01110010

我从我的程序中得到的结果是一个由这些位组成的 int: 10101000111010101110010 它在“T”的表示中缺少开头的 0。

我还包含了最后两行代码,因为我从 's' 得到的二进制字符串是:1110011开头缺少 0。

我检查了我是否错误地向右滚动,但似乎我没有这样做。

4

1 回答 1

3

该方法Integer.toBinaryString()不对左侧的结果进行零填充;您必须自己对其进行零填充。

此值被转换为二进制(以 2 为基数)的 ASCII 数字字符串,没有额外的前导 0。

于 2013-07-10T18:47:25.410 回答