Meine Android-Anwendung empfängt ein Array von Datenbytes, die von einer C# -Anwendung gesendet wird. Ich muss diese Bytes interpretieren.Wie interpretiere ich Hex-Zahl Byte-Array von Linksverschiebung binäre Summe?
In C# -Anwendung gibt es 16 Kontrollkästchen (Bit0 bis Bit15) in Form und der Code zeigt die Verarbeitung dieser Kontrollkästchen Ergebnis.
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
an die Funktion übergeben unten beschrieben, und dann wird es zu meinem Android-Anwendung gesendet.
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));
}
}
In Android-Anwendung, werden die Daten als ein Feld von 4 Bytes empfangen, und dann wird es umgewandelt in Dezimalzahlen
public String bytesToAscii(byte[] data) {
String str = new String(data);
return str.trim();
}
// This returns the decimal
Integer.parseInt(bytesToAscii(flag), 16)
zum Beispiel sagen lassen, wenn Bit13 in der C# Anwendung überprüft wurde; die Andriod app empfängt ein Array von 4 Bytes, die Hexadezimalzahlen darstellt:
flag[0] = 0x30;
flag[1] = 0x30;
flag[2] = 0x32;
flag[3] = 0x30;
Es bis 0020
umgewandelt wird, und es wird dann in Dezimalzahlen umgewandelt:
Integer.parseInt(bytesToAscii(flag), 16); // 32
Ich brauche 32
parsen Bit13 herauszufinden wurde ausgewählt. Bit13 ist nur ein Beispiel für 32. Ich muss herausfinden, welches oder mehrere Bit (0 bis 15) ausgewählt sind.
Warum erhalten Sie die Daten als ein Array von 4 Bytes statt 2 Bytes? – user0815
Warum multiplizieren Sie mit 8? Wenn Sie zwei Bytes haben, dann Daten [0] << 8 + Daten [1] zu einem int16 zu bilden. Dann durchläuft Ihre for-Schleife 16 Bits und sieht aus wie die Umkehrung des Flag-Codes. – jdweng
@JornVernee er fügt 2 Bytes hinzu (0 und 1) - aber ich bekomme nicht den ganzen Prozess der Konvertierung ... – user0815