微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将4个字节打包为一个int [duplicate]

如何解决将4个字节打包为一个int [duplicate]

|                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

存储在Java
int
中的数字只能表示最大为ѭ1positive的正值(2147483647,
Integer.MAX_VALUE
),因为它是带符号的类型(就像所有Java数字类型一样),并且在内部表示形式中,最高有效位用作符号一点。 要保持大于的正数值,您需要使用
long
代替:
public static long pack(int c1,int c2,int c3,int c4)
{
        return ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4)) & 0xffffffffL;
}
请注意,最后必须进行显式的“ 3”掩码操作,以确保符号扩展不会导致负整数结果变成负整数。     ,pack方法中的代码正确无误,并保留所有位,但是由于结果存储在带符号的int中,因此当您尝试将其打印为int或进行算术计算或比较时,会得到错误的结果。
int result = pack( c1,c2,c3,c4 );
System.out.println( \"result=\" + Long.toHexString( result & 0xffffffffL );
这会将int打印为无符号int。     ,标志扩展名。在Java中,整数是有符号的,因此0xBA << 24会使人感到不满意。我建议您将其压缩为
long
的最后四个字节。
long temp =
   ((0xFF & c1) << 24) | ((0xFF & c2) << 16) | ((0xFF & c3) << 8) | (0xFF   & c4);

return (int)(temp & 0x0FFFFFFFFL);
    ,你得到一个负数吗?也许一个无符号的int或一个更长的int会更好。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。