2014-09-28 99 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); 
相关问题