在Java中:
我有一个以十六进制形式给我的32位数字。我给了一个特定的字节数(0-3,0表示最低有效字节),并告诉我需要用另一个以十六进制形式给我的字节替换该字节。例如:32位数字0xAAA5BBC6,用0x17替换字节1得到0xAAA517C6。
我不能使用任何施法,乘法,加法,减法或条件。我无法编写任何帮助器方法,或从此文件或其他文件调用任何其他方法来实现任何方法。此外,这必须用一行代码编写。
我相信我应该使用遮蔽,但我无法弄清楚从哪里开始。给定一个字节数,如何更改所有8位。关闭或打开一个很容易,但将所有8位切换为特定值?
答案 0 :(得分:0)
如何创建一个方法(或类构造函数),其目的是专门分析十六进制值并将其转换为您想要的数据类型。 我强烈建议您阅读有关数据转换的信息或在YouTube上观看有关它的视频,并了解它与您的案例有何关联。 祝你好运! - 最大
答案 1 :(得分:0)
看看下面的例子:
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)
最后一行是您想要的输出。如您所见,有两个按位运算AND and OR。你必须研究那些很多才能知道这项工作。
答案 2 :(得分:0)
在一行中,假设从最不重要的字节计数字节:
int updatedValue = originalValue & ~(0xFF << (byteNumber << 3)) | ((((int)newByte) & 0xFF) << (byteNumber << 3));
其中:
originalValue
是您原来的32位整数
newByte
是您用来替换旧字节的字节
byteNumber
是字节数(0-3)
代码的作用如下:
创建一个掩码&#34;删除&#34;旧字节(清除此字节的位)。为了创建蒙版:
0xFF
(byteNumber << 3)
~
的掩码位,所以我有掩码去&#34;删除&#34;字节:~(0xFF << (byteNumber << 3))
此时您将屏蔽,如果要清除字节#1,则说FFFF00FF
在原始编号和第一步中创建的掩码之间执行按位操作:~(0xFF << (byteNumber << 3))
(byteNumber << 3)
完成的。现在,我执行((int)newByte) & 0xFF)
而不仅仅是((int)newByte))
或仅newByte
的原因是JVM向int
运营商byte
提升<<
{1}}在执行操作0x80
之前,如果你的newByte大于0x7F,这可能会产生不良影响(例如,int
的值将0xFFFFFF80
强制转换为0x00000080
((int)newByte) & 0xFF)
1}}而不是int
)。通过<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="What are you interested in?"
android:gravity="center"
android:layout_gravity="center_horizontal" />
<LinearLayout
android:gravity="center"
android:padding="5px"
android:layout_width="match_parent"
android:layout_margin="10dp"
android:layout_height="wrap_content">
<ImageButton
android:layout_height="100dp"
android:layout_width="100dp"
android:layout_margin="10dp"
android:background="@drawable/education"
android:id="@+id/imageButton" />
<ImageButton
android:layout_height="100dp"
android:layout_width="100dp"
android:layout_margin="10dp"
android:background="@drawable/icon"
android:id="@+id/imageButton2" />
<ImageButton
android:layout_height="100dp"
android:layout_width="100dp"
android:layout_margin="10dp"
android:background="@drawable/icon"
android:id="@+id/imageButton3" />
<ImageButton
android:layout_height="100dp"
android:layout_width="100dp"
android:layout_margin="10dp"
android:background="@drawable/icon"
android:id="@+id/imageButton4" />
</LinearLayout>
</LinearLayout>
我自己升级到var x = { y: 0 };
var z = 5;
function addStrokesToScore(a, b) {
a.y += b;
}
addStrokesToScore(x, z);
console.log(x.y);
并清除不需要的位以防万一。