将两个整数(每个表示一个半字节)附加到十六进制。数

时间:2011-06-24 12:07:20

标签: java jpeg

我为JPEG编码器写了比特流,我遇到了这个问题:

我在int []数组中为AC Cosinus系数(量化后)构建了对。每对:( JPEG标准后的系数/系数类别)。 在这两个整数中,我必须形成一个十六进制数,其中该对的一个整数表示一个半字节。十六进制数必须在以后进行霍夫曼编码。 示例:我的对是(4,5),我需要它(0x45)。

我该怎么做?我的方法是将整数转换为String,附加字符串,然后将它们作为一个整数返回。但是,编译器说

  

线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“0fffffff5”

//Get a Pair (Numbers of Zeros, Coefficient)
            int[]singlePair_ref = acPairs_ref.get(i);

            //Convert to Wrapper Class Integer
            Integer firstNibble_ref = ((Integer)singlePair_ref[0]);
            Integer secondNibble_ref = ((Integer)singlePair_ref[1]);

            //Convert to String
            String firstNibbleString_ref = firstNibble_ref.toHexString(singlePair_ref[0]);
            String secondNibbleString_ref = secondNibble_ref.toHexString(singlePair_ref[1]);

            //Append Strings
            String byteValueString_ref = firstNibbleString_ref+secondNibbleString_ref;
            Integer byteValue_ref = 0;

            //Convert the new formed "one" (formed out of two) Number back to Integer
            byteValue_ref.parseInt(byteValueString_ref); //Line throws Exception
希望你能帮助我。非常感谢! 丹尼尔

编辑: 如果我这样做

YACforHuffman_ref[i] = (singlePair_ref[0] << 4) | singlePair_ref[1];

输出为十进制(3,6)变为54.如果我用

转换此等式的结果
String YACforHuffman_ref = Integer. Integer.toHexString((singlePair_ref[0] << 4) |    singlePair_ref[1];
像迈克上面那样,我为一个大于9的值(价值A-F)而遇到麻烦,现在我知道你的意思了@Mike,抱歉我起初并没有得到它。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

迈克是对的。如果要将结果用作数字而不是字符串,则只需要一个数字表达式。适应您的代码示例:

int[] singlePair_ref = acPairs_ref.get(i);
int byteValue_ref = (singlePair_ref[0] << 4) | singlePair_ref[1];

首先提供更高的蚕食。您也可以将结果转换为byte。

---费达

答案 1 :(得分:1)

我不确定如何将超过9的值传递到整数对中,但假设您可以传入0-15,那么您可能会执行以下操作:

public class Hex {
    public static void main(String[] args) {
        int firstNum  = 4;
        int secondNum = 15;

        System.out.println( Integer.toHexString( firstNum * 16 + secondNum ) );
        // Or if you find it easier to understand
        // System.out.println( Integer.toHexString( ( firstNum << 4 ) + secondNum ) );
    }
}