Пакет PHP ('N', число) и двоичная конкатенация в C # - PullRequest
1 голос
/ 28 мая 2011

Как мне преобразовать следующий код в C #?

return pack('N', $number1) . pack('N', $number2);

Мне удалось преобразовать оставшуюся часть функции, но я понятия не имею, как работает pack('N', number), и я не знаю, что делает . -оператор при применении к двоичным переменным в PHP.

Ответы [ 2 ]

1 голос
/ 28 мая 2011

Вы используете BitConverter, чтобы получить byte представление целого числа, но затем вы должны перевернуть его, потому что на большинстве машин оно имеет порядок байтов.Поскольку я не знаю, упаковываете ли вы их в MemoryStream или byte[] (хотя вы должны это сделать), я просто покажу это точно.

int myInt = 1234;
byte[] num1 = BitConverter.GetBytes( myInt );
if ( BitConverter.IsLittleEndian ) {
    Array.Reverse( num1 );
}

И затем вы можете передать этов ваш буфер, который для C # может быть byte[].Вот как вы можете сделать 2 целых числа:

int myInt1 = 1234;
int myInt2 = 5678;
byte[] temp1 = BitConverter.GetBytes( myInt1 );
byte[] temp2 = BitConverter.GetBytes( myInt2 );

if ( BitConverter.IsLittleEndian ) {
    Array.Reverse( temp1 );
    Array.Reverse( temp2 );
}

byte[] buffer = new byte[ temp1.Length + temp2.Length ];
Array.Copy( temp1, 0, buffer, 0, temp1.Length );
Array.Copy( temp2, 0, buffer, temp1.Length, temp2.Length );
return buffer;
0 голосов
/ 28 мая 2011

pack ('N', $ number1) возвращает целое число $ number1 в виде 4-байтовой двоичной строки в порядке байтов с прямым порядком байтов.

"." оператор объединяет строки.

...