Java.lang.long不能应用于java.lang.string?

时间:2014-09-28 17:12:11

标签: java android debugging error-handling hex

我正在尝试编写一个程序,用于将正二进制输入转换为十六进制。 为什么我在编译二进制到十六进制转换器时会出现此错误..

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

我的代码.. BinToHex类     import 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帮助。 感谢。

2 个答案:

答案 0 :(得分:2)

是的,看看Long.toHexString的签名:

public static String toHexString(long i)

你正试图传入一个字符串。鉴于它意味着将long 转换为一个字符串,它根本不清楚你期望它做什么,但这就是你得到错误的原因 - 这正是编译器告诉你。 (编译器错误有时很模糊,但在这种情况下,他们真的不是......)

您似乎正在做比您应该做的更多转化。您正在通过它的外观自己进行一些十六进制转换,然后一些转换为十进制...如果您将二进制转换为十六进制,为什么要使用十进制表示任何

你的预期输入/输出是不是很清楚你在那里有一个浮点二进制点,但我只是从二进制解析为byte[]并使用一个转换为十六进制的字节数组第三方图书馆...除非您知道这些值只会在long的范围内,在这种情况下,使用Long.parseLongLong.toHexString是合适的,但那些应该是<你需要的所有。摆脱任何来自/从十进制的转换。

答案 1 :(得分:2)

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

您将字符串作为参数传递给静态方法。

中改变它
hexOutput = Long.toHexString(templongDec);