Actionscript 3 Socket.readInt () и c # Socket.Send () разные значения int-variable - PullRequest
0 голосов
/ 19 ноября 2011

Когда я отправляю номер (int) 52 s.Send(BitConverter.GetBytes((int)872415232));, флэш-шоу показывает мне trace(socket.readInt()); 872415232 Если я отправляю 872415232, флэш-шоу 52 ... Почему?И как это исправить?

1 Ответ

3 голосов
/ 19 ноября 2011

Это проблема endianness (порядок следования байтов).

Если вы преобразуете числа в шестнадцатеричные числа, все станет более понятным:

 872415232 = 0x34000000
        52 = 0x00000034
  • Для ActionscriptSocket: «Значение по умолчанию - Endian.BIG_ENDIAN.»
  • Для C # BitConverter: «Порядок байтов в массиве, возвращаемом методом GetBytes, перегружает [...], зависит от того, работает ли компьютерархитектура с прямым порядком байтов или с прямым порядком байтов ".(Little endian в вашем случае).

Вы должны решить, хотите ли вы использовать байты с прямым порядком байтов или байтов с прямым порядком байтов, а затем изменить код ActionScript и C #, чтобы всегда использовать этот порядковый номер.

  • Actionscript: вы можете изменить endian свойство Socket.
  • C #: Вы можете использовать MiscUtil.Conversion.EndianBitConverter из библиотеки MiscUtil Джона Скита .

Если вы не хотите включать целую новую библиотеку только длявыберите порядковый номер в C #, вместо этого вы можете написать короткий метод:

int SwapEndianness(int x)
{
    return (x >> 24) +
           ((x >> 8) & 0x0000ff00) +
           ((x << 8) & 0x00ff0000) + 
           (x << 24);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...