我正在尝试制作一个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位int。我面临的问题是结果是一个23位int。假设我的前3个字符是:
- 具有
01010100
的二进制表示的"T" - 具有
01110101
的二进制表示的'u' - 具有
01110010
的二进制表示的'r'
我从程序中得到的结果是由以下位形成的int:10101000111010101110010
它在"T"的表示形式的开头缺少0。
此外,我还包含了最后2行代码,因为我从"s"中得到的二进制字符串是:1110011
,它在开头缺少0。
我已经检查了我是否错误地向右滚动,但似乎没有这样做。
方法Integer.toBinaryString()
不清零,将结果填充在左侧;你必须自己把它清零。
此值转换为二进制(以2为基数)的ASCII数字字符串没有额外的前导0。