java 中 int和byte数组互转

来源:互联网 发布:南丹县网络问政平台 编辑:程序博客网 时间:2024/05/16 11:58
C:int a[4]
java: int [4] a

int是4个字节,假设一个int的4个字节是abcd,转为byte数组byte[4]。则存为b[0]=a,b[1]=b,b[2]=c,b[3]=d

另外注意:类型转换的原则是值不变,所以000a转为byte是a,a000转成byte无法转成a。
如果从char转为usigned char。可能值会变。当大小一样时,转的时候原则是保持内存内容不变,因为此时不需要补也不需要删(需要补或者删的时候就好考虑使得值不变)。char转为usigned char时告诉系统第一位不再是符号位,也是值位。int和unsigned int也是,互转不会溢出
----------------------一下引至网友----------
unsigned就是第一个符号位也用来作为数据的保存位,
int ---》unsignedint,如果是负数的话,由于第一个是符号位1,所以转换之后的结果就和原来的数不一样了。如果是整数,原来的符号位是0,结果没有变化unsignedint ---> int ,同上考虑
----------------------------------------------
public static byte[] intToByteArray1(int i){   
  byte[] result = newbyte[4];   
  result[0] = (byte)((i>> 24) &0xFF);
//必须把我们要的值弄到最低位去,有人说不移位这样做也可以, result[0] = (byte)(i  &0xFF000000);
//,这样虽然把第一个字节取出来了,但是若直接转换为byte类型,会超出byte的界限,出现error。再提下数//之间转换的原则(不管两种类型的字节大小是否一样,原则是不改变值,内存内容可能会变,比如int转为//float肯定会变)所以此时的int转为byte会越界,只有int的前三个字节都为0的时候转byte才不会越界。虽//然result[0] = (byte)(i  &0xFF000000); 这样不行,但是我们可以这样 result[0] = (byte)((i  &//0xFF000000) >>24);
  result[1] = (byte)((i>> 16) &0xFF);
  result[2] = (byte)((i>> 8) &0xFF); 
  result[3] = (byte)(i &0xFF);
  return result;
}

public static int byteArrayToInt(byte[] b, int offset){
      int value= 0;
      for (int i = 0; i < 4; i++) {
          int shift= (4 - 1 - i) * 8;
          value +=(b[i + offset] & 0x000000FF)<< shift;//往高位游
      }
      return value;
 }


关于byteArrayToInt有必要再写一种
public static int byteArrayToInt(byte[] b, int offset){
      int value= 0;
      for (int i = 0; i < 4; i++) {
value|=b[i];
value=value<<8;
      }
      return value;
 }



以下是C语言:
先说个上次看到的运算符:~按位取反,^按位异或
关于位移运算符还得说明:
<<左移,这没啥好说的,右边补0
>>右移,(左边在java中,正数补0,负数补1)
应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1取决于编译系统的规定。Turbo C和很多系统规定为补1。

-1的8位补码表示是11111111,此时如果是补1的系统,则移任意次值不会变还是-1

整数比特反转
int   reverse(int  m) 
{
int result=0;
int tmp=0;
//while(m){//这里要看是那种编译系统,有的编译系统负数向右移位操作左边补1,这时候这里就会有问题了,最终是移为-1的。
for(inti=0;i<8;i++){
int tmp=m&1;//取m的最低位看是0还是1
result|=tmp;
result<<1;
m>>1;                                         
}
}
原创粉丝点击