写一些根java中的byte操作相关的吧。在java中byte占据一个字节,byte类型的取值范围是[-128, 127]。有时候需要跟c或者c++接口对接,c语言中是有无符号byte的概念的,但是java中没有,因此需要中间做一些处理和转换。好了,下面是一些工具方法,有需要的同学可以拿去用。
public class NumberUtil {
/**
* 将byte数组转为int数组 针对的是无符号byte,在其他语言中的byte可以是无符号的,范围为0~255,但是java的byte范围是-128~127
* @param bytes
* @return
*/
public static int[] getIntFromUnsignedByte(byte[] bytes){
if(bytes == null||bytes.length==0){
return null;
}
int[] ints = new int[bytes.length];
for(int i=0;i<bytes.length;i++){
ints[i] = getIntFromUnsignedByte(bytes[i]);
}
return ints;
}
/**
*java提供了一些有符号 无符号转化相关的类,原理跟下面是一致的
*/
public static int getIntFromUnsignedByte(byte b){
return b&0xff;
}
/**
* 将byte数组转为字符串形式,各个byte之间以指定字符隔开,默认是空格
* @param bytes
* @return
*/
public static String getBytesString(byte[] bytes,String separater){
if(bytes == null||bytes.length==0){
return null;
}
StringBuffer sb = new StringBuffer();
if(separater==null){
separater = "";
}
for(int i=0;i<bytes.length;i++){
sb.append(bytes[i]).append(separater);
}
return sb.toString().trim();
}
/**
* 将int数组转为字符串形式,各个int之间以指定字符隔开,默认是空格
* @param ints
* @return
*/
public static String getIntsString(int[] ints,String separater){
if(ints == null||ints.length==0){
return null;
}
if(separater==null){
separater = "";
}
StringBuffer sb = new StringBuffer();
for(int i=0;i<ints.length;i++){
sb.append(ints[i]).append(separater);
}
return sb.toString().trim();
}
/**
* 左边的数当作高位,左边的数当作低位,求它们的和
* @param high
* @param low
* @return
*/
public static int getHighAndLowSum(int high,int low){
return (high<<8)+low;
}
/**
* 数组按照某种高低位顺序放置元素,求它们的和 fromLowToHigh:true 元素从低位到高位放置
* @param array
* @param fromLowToHigh
* @return
*/
public static long getHighAndLowSum(int[] array,boolean fromLowToHigh){
if(array==null||array.length==0){
return 0L;
}
Long sum = 0L;
if(fromLowToHigh){
for(int i=0;i<array.length;i++){
sum = sum+(((long)array[i])<<(8*i));
}
}else{
for(int i=0;i<array.length;i++){
sum = sum+(((long)array[i])<<(8*(array.length-1-i)));
}
}
return sum;
}
}
网友评论