2014-09-28 30 views
0

我正在嘗試編寫一個用於將正數二進制輸入轉換爲十六進制的程序。 爲什麼會出現這樣的錯誤,而我的編譯二進制到十六進制轉換器..Java.lang.long不能應用於java.lang.string嗎?

BinToHex.java:45: toHexString(long) in java.lang.Long cannot be applied to (java.lang.String) 
      hexOutput = Long.toHexString(tempDecString); 
          ^
1 error 

我的代碼.. 類BinToHex 進口java.io. *;

public class BinToHex { 
    double tempDec,fractionpart; 
    long longofintpart,templongDec; 
    String inpu ="1001.01"; 
    String hexOutput,intpart,tempDecString,hex = null; 

    static int i = 1; 

    public void convertbintohex() { 

     if (inpu.contains(".")) { 
      int placesAfterPoint = inpu.length() - inpu.indexOf(".") - 1;//every thing 
      long numerator = Long.parseLong(inpu.replace(".", ""), 2);//goes 
      double decimalOfInput = ((double) numerator)/(1L << placesAfterPoint);//alright till here 


      while (true) { 
       tempDec = decimalOfInput * 16; 
       if ((int)tempDec == tempDec) { 
        tempDecString = String.valueOf(tempDec); 
        templongDec = Long.valueOf(tempDecString).longValue(); 
        hexOutput = hexOutput+Long.toHexString(templongDec); 
        break; 
       } else { 
        intpart = String.valueOf((long)tempDec); 
        longofintpart = Long.valueOf(intpart).longValue(); 
        if(i==1){ 
         hex=Long.toHexString(longofintpart); 
         hexOutput = hex + "."; 
         i=i+1; 
        }else{ 
         hexOutput = hexOutput + hex; 
        } 
        fractionpart = tempDec-(int)tempDec; 
        decimalOfInput = fractionpart; 
       } 
      } 
     } else { 
       // this part is ok 
      tempDecString = String.valueOf(Integer.parseInt(inpu, 2)); 
      templongDec = Long.parseLong(tempDecString, 10); 
      hexOutput = Long.toHexString(tempDecString); 
     } 
     System.out.println(hexOutput); 
    } 
}  

類測試,,

public class Test{ 
public static void main(String args[]){ 
    BinToHex i = new BinToHex(); 
    i.convertbintohex();  
    } 
} 

plz幫助。 謝謝。

+0

'Long.toHexString'方法更改它以'long'作爲參數,而不是String' – 2014-09-28 17:14:37

+0

的'順便說一句,'double'不存儲在小數的數字。只有在你使用'String.valueOf(double)'將它轉換爲'String'後,它纔會被轉換爲十進制。你不想在這裏做,因爲你想從二進制轉換爲十六進制。 – 2014-09-28 19:11:28

回答

2

嗯,是的,看看Long.toHexString簽名:

public static String toHexString(long i) 

你試圖在一個字符串傳遞。鑑於它是用來將long轉換爲的一個字符串,它完全不清楚你期望的做法,但這就是爲什麼你會收到錯誤 - 這正是編譯器告訴你的。 (編譯器錯誤有時是模糊的,但在這種情況下,他們真的不是......)

您似乎在做轉換比您應該是更多。你正在做一些十六進制轉換自己的外觀,然後一些轉換爲十進制...你爲什麼要做什麼用十進制表示如果你要將二進制轉換爲十六進制?

這不是你期望的輸入/輸出被送給真正清楚什麼是你在那裏有一個浮動小數點,但我也只是從二進制解析到一個byte[]並轉換該字節數組使用第三方庫,以十六進制...除非你知道數值只會在long的範圍內,在這種情況下可以使用Long.parseLongLong.toHexString,但那些應該是全部您需要。擺脫任何到十進制的轉換。

2
templongDec = Long.parseLong(tempDecString, 10); 
hexOutput = Long.toHexString(tempDecString); 

您將字符串作爲參數傳遞給靜態方法。在

hexOutput = Long.toHexString(templongDec); 
相關問題