Я использую 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! Сначала я думал, что проблема заключалась в том, что проблема заключалась в том, что в буфере раньше использовался символ вместо байта, но когда я распечатываю «данные» сразу после чтения, он все равно равен 63.
Есть идеи, что может быть причиной этого? Я знаю, что client.read () должен выводить int и внутренне считывает данные из сокета как uint8_t, который является полным байтом и без знака, поэтому я должен иметь возможность по крайней мере перейти к 255 ...
РЕДАКТИРОВАТЬ: Правильно, Ганс. Не осознавал, что Encoding.ASCII.GetBytes поддерживает только первые 7 бит, а не все 8.