java操作符mod result错误问题
我是一个java初学者。 我试图操作1字节,但%mod operation的值很奇怪。 代码如下:java操作符mod result错误问题,java,Java,我是一个java初学者。 我试图操作1字节,但%mod operation的值很奇怪。 代码如下: ArrayList<byte[]> bytelist; MessageDigest.GetInstance("MD5") String MD5 = new BigInteger(1,byteBuffer).toString(16); byte[] buffer = new byte[2]; System.arraycopy (byteBuffer,0, buffer
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));
arraylistbytelist;
MessageDigest.GetInstance(“MD5”)
字符串MD5=新的大整数(1,byteBuffer).toString(16);
字节[]缓冲区=新字节[2];
System.arraycopy(字节缓冲区,0,缓冲区,0,2);
字节。添加(缓冲区);
字节bOperand=16;//(0x10)
aOperand=(字节)(bytelist.get(0)[0]%bOperand);//=213==(0xD5)
System.out.println(“在“+String.format(“%02x”,aOperand)”之后);
结果:f5(12月11日)expect:5
字节
s与Java中的所有数字类型一样,都是有符号的。所以没有表示213的字节-它会溢出到-43。字节s与Java中的所有数字类型一样,都是有符号的。因此没有表示213的字节-它会溢出到-43。Java的字节总是有符号的,所以它们的范围是-128到127。无符号字节213在Java中表示为-43(两者都有二进制表示11010101)
-43 mod 16是-11,这就是为什么会得到意外的结果
要对无符号字节进行操作,需要更大的数据类型,如int
。您可以使用Byte.toUnsignedInt
将有符号字节转换为正int
,然后对其进行操作:
aOperand = (byte)(Byte.toUnsignedInt(aOperand) % 16);
Java的字节总是有符号的,所以它们的范围是-128到127。无符号字节213在Java中表示为-43(两者都有二进制表示11010101) -43 mod 16是-11,这就是为什么会得到意外的结果 要对无符号字节进行操作,需要更大的数据类型,如
int
。您可以使用Byte.toUnsignedInt
将有符号字节转换为正int
,然后对其进行操作:
aOperand = (byte)(Byte.toUnsignedInt(aOperand) % 16);
请再次检查ma代码。获取MD5字符串并复制前2个字节。其中一个字节是mod操作的。还要注意:混合列表和数组的意义到底是什么。至少,当你认为mod运算符有问题时,为什么不给我们一个简单的例子:使用mod运算符?不要把你自己(和你的读者)和那些与你的问题无关的事情混淆起来。始终消化您的问题,并深入其核心。非常有用,谢谢您,请再次检查ma代码。获取MD5字符串并复制前2个字节。其中一个字节是mod操作的。还要注意:混合列表和数组的意义到底是什么。至少,当你认为mod运算符有问题时,为什么不给我们一个简单的例子:使用mod运算符?不要把你自己(和你的读者)和那些与你的问题无关的事情混淆起来。始终消化您的问题,并深入到问题的核心。非常有用,谢谢。有没有办法将1字节计算为无符号类型?我是C++开发者,所以我会给你一个简单的例子。无符号字符buff=0x21;buff%0x10;//==0x01我需要这个。非常有用,谢谢您。请参阅Sweeper的回答:
Byte.toUnsignedInt()
@worldstar在Java中很少有操作是在单个字节上进行的。大多数操作员在int
、long
、float
和double
上操作。请注意,即使%=
似乎是在单字节上运行,但在%
上仍会执行到%
的二进制数字升级,并且结果会隐式转换回字节
。是否有办法仅将1个字节计算为无符号类型?我是C++开发者,所以我会给你一个简单的例子。无符号字符buff=0x21;buff%0x10;//==0x01我需要这个。非常有用,谢谢您。请参阅Sweeper的回答:Byte.toUnsignedInt()
@worldstar在Java中很少有操作是在单个字节上进行的。大多数操作员在int
、long
、float
和double
上操作。请注意,尽管%=
似乎在单字节上运行,但在%
上仍会执行到int
的二进制数字升级,并且结果会隐式转换回字节。非常有帮助,谢谢you@worldstar如果你认为我的答案回答了你的问题,请考虑通过点击这个标记接受它!非常有用,谢谢you@worldstar如果您认为我的答案回答您的问题,请考虑通过点击这个复选标记接受它!