问题描述
需要把一个4字节进行相关的位操作。先把字节数组转为long类型 然后所有的位操作都是用long类型 每一步位操作后都&0xff这样就保证了无符号8位,然后再把long转为byte。可是得出的结果仍然不对,不知道大家是怎么处理的。 问题补充:gongxuxuxu 写道
解决方案
兄弟 .把你写的java代码给我. 然后把c++传入的byte数组给偶
解决方案二:
是一样的. src[0]<<24 | src[1]<<16 | src[2] << 8 | src[3]); 你这样会自动转int升位的.我是怕他看不懂 才故意分开的.
解决方案三:
没有必要。直接进行字节类型的位操作就行。 public static byte[] int2Bytes(int a) { byte[] res = new byte[4]; res[0] = (byte)(a>>24); res[1] = (byte)(a>>16); res[2] = (byte)(a>>8); res[3] = (byte)a; return res; } public static int bytes2Int(byte[] src) { return (src[0]<<24 | src[1]<<16 | src[2] << 8 | src[3]); }
解决方案四:
public static void longwritetobytes(long intnumber, int startindex,Byte... bytes) {bytes[startindex] = (byte) (intnumber >> 56);bytes[startindex + 1] = (byte) (intnumber >> 48);bytes[startindex + 2] = (byte) (intnumber >> 40);bytes[startindex + 3] = (byte) (intnumber >> 32);bytes[startindex + 4] = (byte) (intnumber >> 24);bytes[startindex + 5] = (byte) (intnumber >> 16);bytes[startindex + 6] = (byte) (intnumber >>;bytes[startindex + 7] = (byte) (intnumber >> 0);}public static long getLongFrombytes(int startindex, Byte... bytes) {long[] longs = new long[8];longs[0] = bytes[startindex] & 0x00000000000000ff;longs[1] = bytes[1 + startindex] & 0xff;longs[2] = bytes[2 + startindex] & 0xff;longs[3] = bytes[3 + startindex] & 0xff;longs[4] = bytes[4 + startindex] & 0xff;longs[5] = bytes[5 + startindex] & 0xff;longs[6] = bytes[6 + startindex] & 0xff;longs[7] = bytes[7 + startindex] & 0xff;return longs[0] << 56 | longs[1] << 48 | longs[2] << 40| longs[3] << 32 | longs[4] << 24 | longs[5] << 16| longs[6] << 8 | longs[7];}
解决方案五:
通过位移啊.. int 到 bytes 32位 按 8个分割.然后降位来存到 当个byte中. 然后把4个byte放到数组...public static void intwritetobytes(int intnumber, int startindex,Byte... bytes) {// 我们先把 intnumber 进行分位保存, 分成4位. 高位保存到数组的最前面.bytes[startindex] = (byte) (intnumber >> 24);bytes[startindex + 1] = (byte) (intnumber >> 16);bytes[startindex + 2] = (byte) (intnumber >>;bytes[startindex + 3] = (byte) (intnumber >> 0);}放过来通过或来拼接. 这里注意下.先前的消位可能导致了你的数值丢失. 就是超过127的byte 变 负了. 不能还原. 所以你要通过 与运算来还原...public static int getIntFrombytes(int startindex,Byte... bytes) {// 我们先定义 一个int 数组.用于存放原始封装到byte中的int值.int[] ints = new int[4];ints[0] = bytes[0 + startindex] & 0x000000ff;// 写这么多0 手痛.呵呵.删了啊.ints[1] = bytes[1 + startindex] & 0xff;ints[2] = bytes[2 + startindex] & 0xff;ints[3] = bytes[3 + startindex] & 0xff;// 然后我们把他们偏移了的位进行还原.再进行或运算.return ints[0] << 24 | ints[1] << 16 | ints[2] << 8 | ints[3];}不止是int .sort long 都是一个道理..