buf = recvPacket.getData();  //buf接收DatagramPacket数据包  
  for(int i = 0 ; i<10 ; i++)    {  
   num[i] = (byte)buf[i];  
   if(num[i] < 0)     {   
   num[i] = num[i] +256 ;  
   } 
   }
我在sockettools中输入16进制的一串字符。打印num[i]出来是十进制呢? 就是num[i]+256那不理解。
还有那个 if(num[i] < 0) 不太理解怎么是小于零。。求教一个高手十六进制

解决方案 »

  1.   

    自己顶一下。JAVA新手。忘高手帮帮忙!
      

  2.   

    +256大约是转有符号数为无符号数吧其它问题得等你补充了什么是socket tools之后啦
      

  3.   

    这个代码,应该是把字节数组的数据放到整型数组当中。
    由于Java中的字节型数据是有符号数,所以,在字节类型的数据表示范围内[0,255],
    所有大于127的数据,都会变成负数。
    那个 +256 的意思应该是把负数转换成正数,保存在整型数组中。其次,楼主你想打印十六进制的字符串出来,靠这个思路是不行的。
    一个十六进制数,占4个比特;一个字节有8个比特;
    也就是说,一个字节保存着两个十六进制数。
    楼主上面代码的转换,应该是把一个字节内保存的数转换成正数保存到整型数组当中,
    当显示和使用这些数据的时候,基本都是按十进制表示和使用的。
    要想表示十六进制数据,还是要把一个字节拆成两个部分,
    想办法分别把拆开的两个部分,表示成十六进制的样子。
      

  4.   

    public static final char [] HEXs = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    public static String toString(byte [] data){
    StringBuilder buff = new StringBuilder(data.length<<1);
    for(int i=0;i<data.length;i++){
    buff.append(HEXs[(data[i]&0xF0)>>4]);
    buff.append(HEXs[data[i]&0x0F]);
    }
    return buff.toString();
    }