我为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,抱歉我起初并没有得到它。我该如何解决这个问题?
答案 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 ) );
}
}