Java 十六进制:在整数中设置一个8位字节

Java 十六进制:在整数中设置一个8位字节,java,integer,bitwise-operators,bitmask,8-bit,Java,Integer,Bitwise Operators,Bitmask,8 Bit,在Java中: 我有一个以十六进制形式给出的32位数字。我得到一个特定的字节号(0-3,0表示最低有效字节),并告诉我需要用另一个同样以十六进制形式提供给我的字节替换该字节。例如:32位数字0xAAA5BBC6,将字节1替换为0x17以获得0xAAA517C6 我不能使用任何强制转换、乘法、加法、减法或条件句。我不能编写任何助手方法,也不能从该文件或其他文件调用任何其他方法来实现任何方法。此外,这必须写在一行代码中 我认为我应该使用掩蔽,但我不知道从哪里开始。给定一个字节数,如何更改所有8位。切

在Java中:

我有一个以十六进制形式给出的32位数字。我得到一个特定的字节号(0-3,0表示最低有效字节),并告诉我需要用另一个同样以十六进制形式提供给我的字节替换该字节。例如:32位数字0xAAA5BBC6,将字节1替换为0x17以获得0xAAA517C6

我不能使用任何强制转换、乘法、加法、减法或条件句。我不能编写任何助手方法,也不能从该文件或其他文件调用任何其他方法来实现任何方法。此外,这必须写在一行代码中


我认为我应该使用掩蔽,但我不知道从哪里开始。给定一个字节数,如何更改所有8位。切换一个关闭或打开很容易,但将所有8位切换为某个特定值

看看下面的例子:

input   =    AA      A5         BB      C6  (in hex)
input   = 10101010 10100101 10111011 11000110 (in binary)
mask    =    FF       FF       00       FF  (in hex)
mask    = 11111111 11111111 00000000 11111111 (in binary) 
-------------------------------------------------------
input   = 10101010 10100101 00000000 11000110 (bitwise AND)
replace =    FF       FF       17       FF  (in hex)
replace = 11111111 11111111 00010111 11111111 (in binary) 
-------------------------------------------------------
input   = 10101010 10100101 00010111 11000110 (bitwise OR)
input   =    AA      A5         17      C6  (in hex)

最后一行是您想要的输出。如您所见,有两种按位操作。你必须对这些进行大量研究,以了解它们是如何工作的

在一行中,假设从最低有效字节开始计算字节:

int updatedValue = originalValue & ~(0xFF << (byteNumber << 3)) | ((((int)newByte) & 0xFF) << (byteNumber << 3));

int updatedValue=originalValue&~(0xFF)考虑如何屏蔽单个位…然后尝试以相同的方式屏蔽8个连续位..查看位移位运算符。使用它们将位掩码移动到位。请注意:字节的编号方式不是通用的。通常,32位数字的低位字节称为“字节0”,但我从其他方面看到了它——我看到它被称为字节3,字节0是高阶8位,我甚至遇到过称它为字节4的人。因此,当问这样的问题时,最好澄清一下。如果你不知道,那么你需要问告诉你这样做的人。更新为状态0,表示最不重要的字节在@morgano完全有效。我只需要看一下它,试着了解到底发生了什么。它开始变得更有意义了,特别是当添加了rakeb。void的评论。我无法告诉你这对我有多大帮助!我能够在很短的时间内解决下一个问题!“从一个以十六进制表示的32位数字返回Nyble,然后返回哪个Nyble”返回(num&(0xF)(我很高兴我对它很有帮助;-)这非常有帮助,感谢@rakeb.void提供的信息。我们刚刚开始在这个意义上使用这些运算符。这看起来相当先进。