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