Преобразовать строку в порядке байтов хоста (младший порядок байтов) в порядок байтов сети (старший эндиан)

У меня есть шестнадцатеричная строка, которая читает 18000000 эта строка находится в порядке байтов хоста (Little Endian), и мне нужно преобразовать ее в порядок байтов сети (Big Endian). Результирующая шестнадцатеричная строка будет 00000018,

Подводя итог мне нужно конвертировать
18000000 to 00000018

Как мне добиться этого в PHP?

0

Решение

Ты можешь использовать pack / unpack Функции для преобразования порядка байтов:

/**
* Convert $endian hex string to specified $format
*
* @param string $endian Endian HEX string
* @param string $format Endian format: 'N' - big endian, 'V' - little endian
*
* @return string
*/
function formatEndian($endian, $format = 'N') {
$endian = intval($endian, 16);      // convert string to hex
$endian = pack('L', $endian);       // pack hex to binary sting (unsinged long, machine byte order)
$endian = unpack($format, $endian); // convert binary sting to specified endian format

return sprintf("%'.08x", $endian[1]); // return endian as a hex string (with padding zero)
}

$endian = '18000000';
$big    = formatEndian($endian, 'N'); // string "00000018"$little = formatEndian($endian, 'V'); // string "18000000"

Чтобы узнать больше о pack формат взглянуть на http://www.php.net/manual/en/function.pack.php

2

Другие решения

по-другому

$input = 18000000;

$length=strlen((string)$input);
$sum=0;
$numbers="";
while ($length>0) {
$number = $input % 10;
$numbers.= $number;
$input = $input/10;
$length--;
}
echo $numbers;
0

Я просто наткнулся на этот ответ, когда искал что-то, но я закончил тем, что сделал что-то намного проще (так как я знал, что моя строка всегда будет иметь начальный ноль, если необходимо выровнять по границе двух символов):

$littlendian = join(array_reverse(str_split($bigendian), 2)));

Очевидно, что если ваш бигендовский ввод не очень хорошо отформатирован, этот прием не сработает напрямую 🙂

0

Попробуй это:

$result=bin2hex( implode( array_reverse( str_split( hex2bin($src) ) ) ) );
0
По вопросам рекламы [email protected]