我是一个java初学者。我正在尝试操作1个字节,但%mod操作的值很奇怪。代码如下:
ArrayList<byte[]> bytelist;
MessageDigest.GetInstance("MD5")
String MD5 = new BigInteger(1,byteBuffer).toString(16);
byte[] buffer = new byte[2];
System.arraycopy (byteBuffer,0, buffer, 0, 2);
byte.add(buffer);
byte bOperand = 16; // (0x10)
aOperand = (byte)(bytelist.get(0)[0] % bOperand); // == 213 == (0xD5)
System.out.println("after : " + String.format("%02x",aOperand));结果: f5 (12月11日)
期望值:5
发布于 2021-04-29 15:25:12
Java的字节总是有符号的,所以它们的范围是-128到127。无符号字节213在Java中表示为-43 (两者都具有二进制表示11010101)。
-43 mod 16是-11,这就是为什么你得到了意想不到的结果。
要对无符号字节进行操作,您需要更大的数据类型,如int。您可以使用Byte.toUnsignedInt将有符号字节转换为正int,然后对其进行操作:
aOperand = (byte)(Byte.toUnsignedInt(aOperand) % 16);发布于 2021-04-29 15:22:23
与byte中的所有数字类型一样,Java中的数字类型都是有符号的。所以没有表示213的字节-它溢出到-43。
https://stackoverflow.com/questions/67312492
复制相似问题