Я пытаюсь читать с акселерометра над BLE с моего устройства Arduino. Единственная проблема заключается в том, что я не уверен, как преобразовать ее обратно в читаемое строковое значение.Как преобразовать значение шестнадцатеричного значения в строку ASCII?
Мой Arduino эскиз (часть) выглядит следующим образом:
if((x - lastX) > threshold) {
STATUS = "MOVING";
toggleIsMoving();
} else if((y - lastY) > threshold) {
STATUS = "MOVING";
toggleIsMoving();
} else if((z - lastZ) > threshold) {
STATUS = "MOVING";
toggleIsMoving();
} else {
STATUS = "STOPPED";
toggleIsStopped();
}
lastX = x;
lastY = y;
lastZ = z;
Serial.print(STATUS);
Шестнадцатеричное значение, которое я получаю в моем приложении Xamarin Android (через BLE) заключается в следующем:
A0-08 -00-00-00-4D-4F-56-49-4E-47-CE-3C
Моя текущая реализация:
public static string FromHex(string hex) {
hex = hex.Replace("-", "");
byte[] raw = new byte[hex.Length/2];
for (int i = 0; i < raw.Length; i++)
raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
return Encoding.ASCII.GetString(raw);
}
Этот результат:
? MOVING? <
Почему это происходит и как я могу преобразовать это обратно в читаемую строку на C#?
Update 1
Я сделал некоторые исследования в исходном боба SDK кода и нашел это:
/**
* Represents a LightBlue Serial Transport Message
*
* Defined as:
*
* [1 byte] - Length (Message ID + Payload)
* [1 byte] - Reserved
* [2 byte] BE - Message ID
* [0-64 bytes] LE - Payload
* [2 bytes] LE - CRC (Everything before CRC)
*
* @param messageId
* @param definition
*/
Update 2
Наконец получили его работы по реализации протокола упомянутый в обновлении 1. Фактическая полезная нагрузка находится внутри, поэтому ее необходимо извлечь из шестнадцатеричной строки.
значение A0-08-00-00-00 находятся за пределами нормального диапазона печати, чтобы дать вам неудивительные символы. – BugFinder