现在有C的表达式 i64 = ((__int64)(*(ob+20))<<32);
如何将它转换为用java语言表示的表达式?
因为_int64是64位的数据类型,所以很难在java中找到转换的。
如何将它转换为用java语言表示的表达式?
因为_int64是64位的数据类型,所以很难在java中找到转换的。
解决方案 »
- java 和 windows 通信原理
- 写一个简单的TCP服务器和客户机,实现上传和下载功能时遇到的问题
- 数据结构的意义
- 怎么样把一个自定义的类型的数据写入一个文件再按照这个类型读
- 各位高手,我想问问如何控制用户在JTextField中的输入????
- 一个java小程序 请大家帮小妹一下 多谢了 在线等待
- 网上有哪些经典的java程序可看?
- 'this'在'构造代码块'中也是'当前对象的意思?
- Thinking in Java.......
- 上哪去找corejava?java2核心技术(卷Ⅰ:基础知识)配套光盘的corejava可以吗?若可以该如何设置?
- java hashMap获取键值对
- org.jdesktop.layout does not exist编译错误
public class testJe {
public static void main(String[] args) {
//4294967296
byte[] ob = new byte[]{0,50,0,17,33,64,-83,118,-2,-15,0,0,13,-7,127,0,68,-26,22,13,1,-86,98,39,1,1,14,0,0,0,0,0,0,0};
byte[] tob = copyBrr(ob, 20);
long iii = (unsigned4BytesToInt(copyBrr(ob, 20), 0) << 32)&0xFFFFFFFFL;
System.out.println(iii);
}
public static byte[] copyBrr(byte[] inBrr,int n){
byte[] outBrr=null;
//容错处理
if(null==inBrr){
return null;
}else{
if(n>=0&&n<inBrr.length){
outBrr=new byte[inBrr.length-n];
//outArr=Arrays.copyOfRange(inArr, n,inArr.length); //jdk1.4中无此方法
for(int i=0;i<outBrr.length;i++){
outBrr[i]=inBrr[n+i];
}
}else if(n<0){
outBrr = inBrr;
}else if(n>inBrr.length){
outBrr = null;
}
}
return outBrr;
}
public static long unsigned4BytesToInt(byte buf[], int index) {
int firstByte = (0x000000FF & ((int) buf[index]));
int secondByte = (0x000000FF & ((int) buf[index + 1]));
int thirdByte = (0x000000FF & ((int) buf[index + 2]));
int fourthByte = (0x000000FF & ((int) buf[index + 3]));
long unsignedLong = ((long) (firstByte | secondByte << 8 | thirdByte << 16 | fourthByte << 24)) & 0xFFFFFFFFL;
return unsignedLong;
}
曾这样写过,但遇到大的数,这样转换就不对了
long i64 = (long)(ob[20]<<32); //*(ob+20)相当于数组的ob[20]
应该是 long i64 = (long)ob[20]<<32;
强制类型转换优先级高于 位移运算符
long unsignedLong = ((long) (firstByte | secondByte << 8 | thirdByte << 16 | fourthByte << 24)) & 0xFFFFFFFFL;改成
long unsignedLong = (firstByte & 0xFFFFFFFFL) | ((secondByte & 0xFFFFFFFFL) << 8) | ((thirdByte & 0xFFFFFFFL) << 16) | ((fourthByte & 0xFFFFFFFL) << 24);LZ好好想想其中的区别
是不是后面少写了8个F啊?
long iii = (unsigned4BytesToInt(copyBrr(ob, 20), 0) << 32)&0xFFFFFFFFFFFFFFFFL; ?
System.out.println(Long.toBinaryString(iii));结果:10011101100010101010100000000100000000000000000000000000000000,这是你期望得到的结果吗?
8好意思,这里说错了,|运算不会发生进位,把|运算相当然成+运算,所以最后的结果 &0xffffffffL是没问题的int a = Integer.MAX_VALUE + 1;
int b = Integer.MAX_VALUE + 1;
long c = (a | b) & 0xffffffffL; //把|改成+就不一样了
System.out.println(c);
long d = (a & 0xffffffffL) | (b & 0xffffffffL); //把|改成+就不一样了
System.out.println(d);