黑马程序员技术交流社区
标题:
怎样把一个16进制的数转换到字节数组?
[打印本页]
作者:
zoudeyong
时间:
2013-5-1 23:19
标题:
怎样把一个16进制的数转换到字节数组?
public static byte[] intToByte(int cmd) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream ds = new DataOutputStream(baos);
try {
ds.writeInt(cmd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toByteArray();
}
public static void main(String[] args) {
int packageMark = 0x5544a1a1;
byte[] bye = new byte[4];
bye = intToByte(packageMark);
for(int i=0; i<bye.length; i++) {
System.out.print(bye[i]+" ");
}
结果:85 68 -95 -95 为什么有负数,怎样才能是正数呢??
作者:
kaka小明
时间:
2013-5-2 09:09
本帖最后由 kaka小明 于 2013-5-2 11:54 编辑
java中的数值基本数据类型均为有符号数据,负数存储形式为其补码,需要对把负数的补码转换成无符号数,代码如下:
public static byte[] intToByte(int cmd) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream ds = new DataOutputStream(baos);
try {
ds.writeInt(cmd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toByteArray();
}
public static void main(String[] args) {
int packageMark = 0x5544a1a1;
byte[] bye = new byte[4];
bye = intToByte(packageMark);
for(int i=0; i<bye.length; i++) {
int tmp=bye
;//java中的byte short int long均为有符号类型,目前java没有无符号数据类型,0xa1的最高位为1当然会打印负数,
if(tmp<0)
tmp+=256;//如果为负数,如-1,那么你想要的正数为0xff,需要加上byte的模256,准换成无符号数据显示。
System.out.print(tmp+" ");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2