如何解决将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 举报,一经查实,本站将立刻删除。