我的android應用程序正在接收從C#應用程序發送的數據字節數組。我需要解釋這些字節。如何從左移二進制和解釋十六進制數字節數組?
在C#應用程序中,表單中有16個複選框(Bit0到Bit15),代碼顯示這些複選框結果的處理。
ushort flag = (ushort)(
(Bit0.Checked ? (1 << 0) : (0)) +
(Bit1.Checked ? (1 << 1) : (0)) +
(Bit2.Checked ? (1 << 2) : (0)) +
(Bit3.Checked ? (1 << 3) : (0)) +
(Bit4.Checked ? (1 << 4) : (0)) +
(Bit5.Checked ? (1 << 5) : (0)) +
(Bit6.Checked ? (1 << 6) : (0)) +
(Bit7.Checked ? (1 << 7) : (0)) +
(Bit8.Checked ? (1 << 8) : (0)) +
(Bit9.Checked ? (1 << 9) : (0)) +
(Bit10.Checked ? (1 << 10) : (0)) +
(Bit11.Checked ? (1 << 11) : (0)) +
(Bit12.Checked ? (1 << 12) : (0)) +
(Bit13.Checked ? (1 << 13) : (0)) +
(Bit14.Checked ? (1 << 14) : (0)) +
(Bit15.Checked ? (1 << 15) : (0)));
flag
傳遞給下面描述的功能,然後將其發送到我的Android應用程序。
public static void setFlag(List<Byte> data, ushort flag)
{
for (int i = 0; i < 2; i++)
{
int t = flag >> (i * 8);
data.Add((byte)(t & 0x00FF));
}
}
在Android應用,該數據被接收到的爲4個字節的數組,然後將其轉換爲十進制
public String bytesToAscii(byte[] data) {
String str = new String(data);
return str.trim();
}
// This returns the decimal
Integer.parseInt(bytesToAscii(flag), 16)
比方說,例如,當位13在C#申請被檢查;安卓應用接收的4個字節的數組表示十六進制數:
flag[0] = 0x30;
flag[1] = 0x30;
flag[2] = 0x32;
flag[3] = 0x30;
它被轉換爲0020
,然後將其轉換爲十進制:
Integer.parseInt(bytesToAscii(flag), 16); // 32
我需要解析32
找出位13被選中。 Bit13只是32的一個例子。我需要確定選擇了哪一個或多個Bit(0到15)。
爲什麼你收到的數據是4字節而不是2字節的數組? – user0815
你爲什麼乘以8?如果你有兩個字節,那麼data [0] << 8 + data [1]組成一個int16。然後你的循環通過16位循環,看起來像'旗'代碼的反面。 – jdweng
@JornVernee他加了2 Bytes(0和1) - 但我沒有得到轉換的整個過程... – user0815