我有套接字应用程序,我可以一个字节一个字节地读取,我可以把所有字节推入一个数组。我读到如下。所以我将有12+bodylen字节
int messageID = r.readUnsignedShort();
int bodyLen = r.readUnsignedShort();
byte[] phoneNum = new byte[6];
r.readFully(phoneNum);
int serialNum = r.readUnsignedShort();
byte[] messageBody = new byte[bodyLen];
r.readFully(messageBody);
byte checkCode = r.readByte();
接下来我这样做,我创建了一个字节缓冲区,后来我试图运行for循环,首先打印检查它的字节格式是否在整数值中收到它,因为其中一个值是-110?我也收到错误在这一行xor = (byte)xor ^ (byte)fullMessage[sf];可能会失去精度?
ByteBuffer buf = ByteBuffer.allocate(12+bodyLen);
buf.putShort((short)messageID);
buf.put((byte)bodyLen);
buf.put(phoneNum);
buf.putShort((short)serialNum);
buf.put(messageBody);
byte[] fullMessage=buf.array();
int xor = 0;
for(int sf=0,s=fullMessage.length;sf<s;sf++){
xor ^= fullMessage[sf];
fullMessage[sf] = (byte)xor;
// System.out.println("nnprint value for : "+sf+" "+"value is:"+xor);
// do your XOR operations -> xor operator is ^
}
System.out.println("nnfinal xor is :"+xor+" "+Integer.toHexString(xor));
既然你在做:
int serialNum = r.readUnsignedShort();
代替buf.put((byte)serialNum);
buf.putShort((short)serialNum);
符号使值倾斜,但可以通过以下方法修复:& 0xFFFF
.
字节被格式化为:
byte x = (byte) 0xA0; // Negative signed byte value
byte y = ...
byte z = (byte)(x ^ y); // Xor is done on int
所以格式是:
int xor = 0;
for (int sf = 0, s = fullMessage.length; sf < s; sf++) {
xor ^= fullMessage[sf];
fullMessage[sf] = (byte)xor;
}
使用0是^
的中性元素
xor = (byte) ((byte)xor ^ (byte)fullMessage[sf]);