Как и @Maximiliangerhardt, MiniJson не имеет возможности десериализоваться должным образом. Я использовал JsonFx и работал как шарм. Работает с []
player[] p = JsonReader.Deserialize<player[]>(serviceData);
Debug.Log(p[0].playerId +" "+ p[0].playerLoc+"--"+ p[1].playerId + " " + p[1].playerLoc+"--"+ p[2].playerId + " " + p[2].playerLoc);
<<
- оператор сдвига слева; это берет двоичное представление значения и перемещает все биты «n» влево (кроме «mod», см. «1»), заполняя нули нулями.
>>
- оператор правого сдвига; это делает почти противоположное (перемещение вправо), за исключением знаковых значений (т. е. тех, которые могут быть отрицательными), он заполняет 1 с для отрицательных значений, а остальные нули.
1:
Оператор сдвига по существу является «mod» шириной данных. Int - 32 бита, поэтому сдвиг влево 33 (в Int32) точно такой же, как сдвиг влево 1. Вы не получаете все нули. A long
- 64 бита, поэтому сдвиг влево 33 дает другой ответ (исходное время 2 ^ 33).
2:
Каждый сдвиг влево (в пределах данных ширина) одинакова (для целых чисел) как x2 - так что & lt; 4 равно x2x2x2x2 = x16.
Это простой двоичный файл:
0000000001 = 1
& lt; переходит в
0000000010 = 2
& lt; переходит в
0000000100 = 4
& lt; переходит в
0000001000 = 8
Еще несколько заметок для начинающего программиста:
Зачем использовать операторы сдвига? Они, похоже, не очень много делают. Ну, есть две причины:
«Оператор сдвига по существу является« mod »шириной данных».
Мусор! Если величина сдвига больше или равна ширине данных, результат не определен. Не ожидайте того же самого «мода», который вы видели, чтобы произойти с разными компиляторами или разными версиями одного и того же компилятора или в разных ситуациях смены в одной и той же программе или когда что-либо еще изменилось. Вот что означает «неопределенный».
Чтобы немного расширить ответ от Marc (Марк, не стесняйтесь включать это в свой, и я удалю этот ответ), это указано в разделе 7.8 спецификации:
предопределенные операторы сдвига перечислены ниже.
Сдвиг влево:
. & lt; оператор смещает x слева на число бит, вычисленное, как описано ниже.
Биты высокого порядка вне диапазона результата результата x отбрасываются, остальные биты сдвигаются влево, а младшие разряды пустые позиции битов установлены на ноль.
Сдвиг вправо:
Оператор >> сдвигает x справа на число бит, вычисленное, как описано ниже.
Когда x имеет тип int или long, младшие биты x отбрасываются оставшиеся биты сдвигаются вправо, а старшие разряды старшего разряда устанавливаются на ноль, если x неотрицательно и устанавливается в единицу, если x отрицательно.
Когда x имеет тип uint или ulong , младшие разряды x отбрасываются, остальные биты сдвигаются вправо, а позиции пустого разряда высокого порядка устанавливаются на ноль.
Для предопределенных o число бит для сдвига вычисляется следующим образом:
Когда тип x является int или uint, счетчик сдвига задается младшими пятью битами счета. Другими словами, подсчет сдвига вычисляется из count & amp; 0x1F.
Когда тип x длинный или ulong, счетчик сдвига задается шестью битами младшего порядка. Другими словами, подсчет сдвига вычисляется из count & amp; 0x3F.
Если итоговое значение сдвига равно нулю, операторы сдвига просто возвращают значение x.