A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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    为什么有负数,怎样才能是正数呢??

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 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+"  ");

        
        }
}

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马