PHP的包('N',数字)和C#中的二进制连接

时间:2011-05-28 17:40:08

标签: c# php binary pack

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

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

我设法转换了函数的其余部分,但我不知道pack('N', number)是如何工作的,也不知道. - 运算符在PHP中应用于二进制变量时的作用

2 个答案:

答案 0 :(得分:1)

您使用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;

答案 1 :(得分:0)

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

“。”运算符连接字符串。