PHP';s包(';N';,数字)和C#中的二进制级联

本文关键字:级联 二进制 PHP 数字 | 更新日期: 2023-09-27 17:57:49

如何将以下代码转换为C#?

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

我已经成功地转换了函数的其余部分,但我不知道pack('N', number)是如何工作的,也不知道当.-运算符应用于PHP中的二进制变量时会做什么。

PHP';s包(';N';,数字)和C#中的二进制级联

您使用BitConverter来获得整数的byte表示,但您必须翻转它,因为在大多数机器上,它是小endian。由于我不知道你是把这些包装成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;

pack('N',$number1)以大端字节顺序将整数$number1作为4字节二进制字符串返回。

"."运算符连接字符串。