2013-07-10 54 views
0

我試圖做一個UUENCODE算法和我的代碼部分包含此:只有7位Java char?

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位整數。說我的前3個字符爲:

  • 'T' 與01010100
  • 'U' 與01110101
  • 'R' 的與01110010
二進制表示的二進制表示的二進制表示

從我的程序中得到的結果是由這些位形成的int: 10101000111010101110010 缺少從'T'表示的開始處的0。

此外,我還包括了最後2行代碼,因爲我從's'得到的二進制字符串是:1110011,它在開始時缺少0。

我檢查過我是否錯誤地滾動到右側,但似乎並沒有這樣做。

+0

ASCII字母是7位。一切都很有意義。如果你有一點缺點,你可以考慮一個前導零,'n'無論如何都有32位。 – jlordo

回答

2

方法Integer.toBinaryString()不會零填充左邊的結果;你將不得不自行填零。

該值在二進制(基2) 中轉換爲ASCII數字串,沒有額外的前導0。

+0

所以我將不得不在最後添加一個額外的0?謝謝 ! – Bula

+0

@Bula最簡單的方法我可以想象這樣做:'(c <0?「」:「0」)+ binaryString'。這樣如果'c',字符是負數,它將在前面的位槽中有1,並且不需要填充。這是假設你只使用像例子中提供的字母字符。 – 2013-07-10 19:47:53

+0

所以檢查天氣我的字符串是23或24位會告訴我天氣添加0作爲我最左邊的字符?非常感謝! – Bula