PHP 的 pack('N', number) 和 C# 中的二进制连接

发布于 2024-11-10 16:48:54 字数 217 浏览 4 评论 0原文

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

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

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

How do I convert the following code to C#?

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

I've managed to convert the rest of the function, but I have no idea how the pack('N', number) works, nor do I know what the .-operator does when applied to binary variables in PHP.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

俏︾媚 2024-11-17 16:48:54

您可以使用 BitConverter 来获取整数的字节表示形式,但您必须翻转它,因为在大多数机器上它是小端字节序。由于我不知道您是否将它们打包到 MemoryStreambyte[] 中(尽管您应该这样做),所以我将准确地展示这一点。

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;

You use BitConverter to get the byte representation of the integer, but than you have to flip it because on most machines it is little-endian. Since I don't know whether you're packing these into a MemoryStream or byte[] (though you should), I'll just show exactly that.

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

And then you can transfer that to your buffer, which for C# might be a byte[]. Here's how you might do 2 integers:

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;
吃兔兔 2024-11-17 16:48:54

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

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

pack('N', $number1) returns the integer $number1 as a 4-byte binary string in big endian byte order.

The "." operator concatenates strings.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文