Я использую Arduino (duemilanove) с официальным экраном Ethernet для отправки данных на контроллер для управления светодиодной матрицей. Я пытаюсь отправить некоторые необработанные 32-битные беззнаковые значения int (временные метки unix) на контроллер, взяв 4 байта в 32-битном значении на рабочем столе и отправив его в Arduino как 4 последовательных байта. Однако всякий раз, когда значение байта больше 127, клиентская библиотека Ethernet возвращает 63.
Ниже приведен базовый пример того, что я делаю на стороне Arduino. Кое-что убрано для наглядности.
byte buffer[32];
memset(buffer, 0, 32);
int data;
int i=0;
data = client.read();
while(data != -1 && i < 32)
{
buffer[i++] = (byte)data;
data = client.read();
}
Итак, всякий раз, когда входной байт больше 127, переменная data в конечном итоге будет иметь значение 63! Сначала я думал, что проблема находится дальше по строке (раньше буфер был char, а не byte), но когда я распечатываю «данные» сразу после чтения, все равно 63.
Есть идеи, что может быть причиной этого? Я знаю, что client.read () должен выводить int и внутренне считывать данные из сокета как uint8_t, который является полным байтом и без знака, поэтому я должен иметь возможность, по крайней мере, перейти к 255 ...
РЕДАКТИРОВАТЬ: Верно, Ганс. Не понимал, что Encoding.ASCII.GetBytes поддерживает только первые 7 бит, а не все 8.