Current Location: Home> Latest Articles> How to Use the pack("n") Function to Pack Data in Network Byte Order (Big-Endian)?

How to Use the pack("n") Function to Pack Data in Network Byte Order (Big-Endian)?

M66 2025-07-10

In network programming, data byte order (Endian) is a very important concept. Different computer architectures may use different byte orders: Big-Endian and Little-Endian. Network protocols typically use Big-Endian (also known as network byte order), which requires us to convert data to Big-Endian format when sending it.

In PHP, the pack() function provides a convenient way to pack data according to a specified format. This article will introduce how to use the pack("n") function to convert integer data into network byte order (Big-Endian) format.


1. What is the pack() Function?

The pack() function is a built-in PHP function that converts data into a binary string according to a specified format. It supports various formats, including integers, floating-point numbers, strings, and more. This function is commonly used in network communication, file writing, and handling various binary protocols.

Function prototype:

string pack(string $format, mixed $values, mixed ...$values2);
  • $format: The format string specifies the type and arrangement of the data.

  • $values: The values to be packed.


2. What Does pack("n") Represent?

In the pack() format string, "n" means to pack a 16-bit unsigned integer in network byte order (Big-Endian).

  • n: 16-bit unsigned short, using Big-Endian byte order.

  • The opposite is v, which represents a 16-bit unsigned short using Little-Endian byte order.


3. Example Usage

Suppose you want to pack the number 0x1234 into a binary string using network byte order. You can do it like this:

<?php
$number = 0x1234;
$packed = pack("n", $number);
<p>echo bin2hex($packed); // Output: 1234<br>
?><br>

Here, pack("n", $number) will convert the number 0x1234 into a binary string with byte order 0x12 0x34.

If you use pack("v", $number), the output will be in Little-Endian byte order:

<?php
$number = 0x1234;
$packed = pack("v", $number);
<p>echo bin2hex($packed); // Output: 3412<br>
?><br>


4. Example Use Case

In network protocols, it is common to send 16-bit numbers such as port numbers and lengths in network byte order. For example, constructing a custom network packet:

<?php
// Port number 8080 (0x1F90)
$port = 8080;
<p>// Pack port number in network byte order<br>
$packedPort = pack("n", $port);</p>
<p>// Use $packedPort when sending data to ensure correct byte order<br>
?><br>


5. Real-world URL Example

If you need to work with URLs in your code and replace the domain name with m66.net, for example:

<?php
$url = "https://m66.net/path/to/resource";
echo "Access URL: " . $url;
?>

You can flexibly replace the domain name with whatever you need in real applications.


In summary, pack("n") is the most straightforward and effective way to pack a 16-bit unsigned integer in network byte order (Big-Endian) in PHP. It is particularly useful for handling binary data in network protocols.