需要把一个4字节进行相关的位操作。先把字节数组转为long类型 然后所有的位操作都是用long类型 每一步位操作后都&0xff这样就保证了无符号8位,然后再把long转为byte。可是得出的结果仍然不对,不知道大家是怎么处理的。
兄弟 .把你写的java代码给我. 然后把c++传入的byte数组给偶
通过位移啊.. 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 >> 8);
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 都是一个道理..
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 >> 8);
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];
}
没有必要。直接进行字节类型的位操作就行。
[code="java"] 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]);
}[/code]
是一样的.
src[0]<<24 | src[1]<<16 | src[2] << 8 | src[3]); 你这样会自动转int升位的.
我是怕他看不懂 才故意分开的.