Это проблема endianness (порядок следования байтов).
Если вы преобразуете числа в шестнадцатеричные числа, все станет более понятным:
872415232 = 0x34000000
52 = 0x00000034
- Для Actionscript
Socket
: «Значение по умолчанию - 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);
}