我与遗留系统进行交互,遗留系统在位级别上需要大量输入。它要求我传入具有特定位设置的八位字节(实际上是字节)。
为了保持这种可读性,我声明了一些这样的标志:
private static final byte FLAG_A = 0b00010000;
private static final byte FLAG_B = 0b00100000;
private static final byte FLAG_C = 0b00011000;
完美无缺。
奇怪的是,当我设置最高位(如下所示)时,编译器开始抱怨找到一个int。我可以把它扔掉,但这对我来说似乎很奇怪。它仍然是8位,所以我希望它适合一个字节(即使双补码符号导致它被解释为负数,这对我没有影响)
private static final byte FLAG_D = 0b10000000;
知道发生了什么事吗?
答案 0 :(得分:4)
0bxxxx表示法用于整数的逐位表示,如果它们适合,可以转换为字节,但这不是特殊的仅字节表示法。 0b1000000是正+128,这可以超过字节。您需要执行类似-0b111111(-127)的操作来实现字节模式0b1000000,但最好是进行显式转换。你真正需要的是无符号字节类型,这是java缺乏的。
答案 1 :(得分:1)
从@Artur Biesiadowski停止的地方开始,你实际上是在尝试存储超过一个字节可以处理的内容。
1 0 0 0 0 0 0 0
7th 6th 5th 4th 3rd 2nd 1st 0th
此值为+128; Java字节范围是-128到+127 [read further here]。
更清晰,更易读的方法可能是使用十六进制而不是0bxxx。
现在,由于您要求将+128存储在最多可存储+127的数据类型中,因此它会自动使用可以存储更大范围的数据类型,即int
来自类型的进程推广。 [JLS 5.x]详细解释了这一点。
答案 2 :(得分:0)
另一种解决方案是使用BitSet
及其更易读的方法。您仍然可以为各个位使用标志,但它们是索引而不是位掩码。然后,您可以使用BitSet.toByteArray()[0]
检索生成的字节。
答案 3 :(得分:-3)
您可能希望将您的旗帜声明为
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RLMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/img2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginLeft="1dp"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/img1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="right"
android:layout_marginRight="30dp"
android:layout_marginTop="30dp"
android:src="@mipmap/ic_launcher" />
<LinearLayout
android:id="@+id/LL2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/img1"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<Button
android:id="@+id/button10"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignTop="@+id/button8"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text=" Afspraak maken" />
<Button
android:id="@+id/button8"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text=" Bezoek tijden" />
<Button
android:id="@+id/button9"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text=" Contact" />
</LinearLayout>
<LinearLayout
android:id="@+id/LL3"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/LL2"
android:layout_marginBottom="20dp"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<Button
android:id="@+id/button3"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Route" />
<Button
android:id="@+id/button4"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Uw mening" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignLeft="@+id/button5"
android:layout_below="@+id/button8"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="Word vriend" />
</LinearLayout>
<LinearLayout
android:id="@+id/LL4"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/LL3"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<Button
android:id="@+id/button5"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="5dp"
android:layout_weight="1.03"
android:text="Folders" />
<Button
android:id="@+id/button6"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Specialisten" />
<Button
android:id="@+id/button7"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_weight="0.97"
android:text="Brandwond encentrum" />
</LinearLayout>
<LinearLayout
android:id="@+id/LL5"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/LL4"
android:layout_marginTop="30dp"
android:orientation="horizontal">
<Button
android:id="@+id/button2"
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="0dp"
android:layout_weight="1"
android:text="Nieuws en Agenda" />
</LinearLayout>
<LinearLayout
android:id="@+id/LL6"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/LL5"
android:layout_marginBottom="40dp"
android:layout_marginTop="30dp"
android:orientation="horizontal">
<Button
android:id="@+id/button11"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Facebook" />
<Button
android:id="@+id/button12"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:text="Youtube" />
<Button
android:id="@+id/button13"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignLeft="@+id/button5"
android:layout_below="@+id/button8"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="Twitter" />
<Button
android:id="@+id/button14"
style="?android:attr/buttonStyleSmall"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_alignLeft="@+id/button5"
android:layout_below="@+id/button8"
android:layout_marginLeft="5dp"
android:layout_weight="1"
android:text="LinkedIn" />
</LinearLayout>
</RelativeLayout>
我猜编译器认为255不符合有符号字节(只有-128到127)