在写java qq安卓协议的时候,遇到很多麻烦,其中一个就是以下汇编语言
没时间去看具体意思,只能摸索,如下代码
.版本 2
.子程序 到无符号长整型, 长整数型
.参数 long, 整数型
置入代码 ({ 139, 69, 8, 51, 210, 201, 194, 4, 0 })
返回 (0)
//* “长整数形:-2047848776”
// * “转换后:2247118520”
package com.koow.kkwwo.bytes.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Random;
import org.apache.log4j.Logger;
import com.koow.kkwwo.c.Pack;
import com.koow.kkwwo.hex.util.HexUtil;
/**
* 和 byte[]的相互转换
*
* @author Koow
*
*/
public class ToButeArray {
private static Logger logger = Logger.getLogger(ToButeArray.class);
/**
* 16进制字符串转Int Integer.parseInteger的时候,会将传入十六进制数字一致认为成正数,
* 所以这时候表示负数的十六进制字符串所表示的数字就超出了Integer所能表示的数字范围,会报出NumberFormatException
* 转换为BigInteger再转换Int
*
* @param n
* @return
*/
public static Integer String16ToInt(String n) {
n=Pack.c_Null(n);
return Integer.valueOf(n, 16);
}
/**
* 16进制字符串转BigInteger
*
* @param n
* @return
*/
public static BigInteger String16ToBigInteger(String n) {
n=Pack.c_Null(n);
return new BigInteger(n, 16);
}
/**
* Int转16进制字符串
*
* @param n
* @return
*/
public static String LongToString16(long n) {
String st = Long.toHexString(n).toUpperCase();
st = String.format("%5s", st);
st = st.replaceAll(" ", "0");
return st;
}
/**
* 整数转换成字节数组 关键技术:ByteArrayOutputStream和DataOutputStream
*
* @param n
* 需要转换整数
* @return
*/
public static byte[] intToButeArray(int n) {
byte[] byteArray = null;
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(byteOut);
dataOut.writeInt(n);
byteArray = byteOut.toByteArray();
} catch (IOException