How do I convert an int to byte array in PHP?

I need to convert an integer value to a 2 byte array and then to a 2 character string to write to a text file.  I obtain the value from the file using:

$fhandle = fopen($this->FilePath, 'r');
$myVal  = unpack('S',fread($fhandle, 2));
echo 'My Val = '.$myVal[1]; //let's say that $myVal = 1234

How do I convert the value back to the original format from an integer?

Thank you,

j
j-techAsked:
Who is Participating?
 
MathiasConnect With a Mentor IT SpecialistCommented:
Take a look at this:

Output:
----------
0x1234
LB: 0x34
HB: 0x12
0x1234
LB: 0x34
HB: 0x12
0x12345678LW: 0x5678
HW: 0x1234
0x12345678LW: 0x5678
HW: 0x1234
Start: 0x1234
Array: 0x34, 0x12,
Array: 52, 18
String: 4
Hex output
34 12                                           | 4.
----------
<?php
// Function found at: http://www.theserverpages.com/scripts/
// Please leave this comment intact when using this code!
function hexoutput($data, $width=16)
{
	$st=0;
	$txt="";
	$out="";
	for ($i=0; $i<strlen($data); $i++)
	{
		$n=ord(substr($data,$i,1));
		$c=str_pad(dechex($n),2,"0",STR_PAD_LEFT);
		$out.=$c." ";
		if ($n==32 || $n>32 && $n<127 || $n>160)
		{
			$txt.=substr($data,$i,1);
		}
		else
		{
			$txt.=".";
		}
		if ($i % $width == $width-1)
		{
			$out.="| ".$txt."\n";
			$txt="";
		}
	}
	$out.=str_repeat("   ",$width-($i % $width));
	$out.="| ".$txt;
	$out.="\n";
	return $out;
}

function LO_BYTE($x)
{
	return ($x & 0x00FF);
}
function HI_BYTE($x)
{
	return (($x & 0xFF00) >> 8);
}
function LO_WORD($x)
{
	return ($x & 0xFFFF);
}
function HI_WORD($x)
{
	return (($x >> 16) & 0xFFFF);
}
function MAKE_WORD($a, $b)
{
	return (($b << 8) + $a);
}
function MAKE_LONG($a, $b)
{
	return ($a | ($b << 16));
}

echo '<pre>';

$test = 0x1234;
echo sprintf("0x%04X\n", $test);

echo sprintf("LB: 0x%02X\n", LO_BYTE($test));
echo sprintf("HB: 0x%02X\n", HI_BYTE($test));

$test = MAKE_WORD(LO_BYTE($test), HI_BYTE($test));
echo sprintf("0x%04X\n", $test);

echo sprintf("LB: 0x%02X\n", LO_BYTE($test));
echo sprintf("HB: 0x%02X\n", HI_BYTE($test));

$test = 0x12345678;
echo sprintf("0x%08X", $test);

echo sprintf("LW: 0x%04X\n", LO_WORD($test));
echo sprintf("HW: 0x%04X\n", HI_WORD($test));

$test = MAKE_LONG(LO_WORD($test), HI_WORD($test));
echo sprintf("0x%04X", $test);

echo sprintf("LW: 0x%04X\n", LO_WORD($test));
echo sprintf("HW: 0x%04X\n", HI_WORD($test));

$test = 0x1234;
echo sprintf("Start: 0x%04X\n", $test);
echo "Array: ";
$arr = array(LO_BYTE($test), HI_BYTE($test));
foreach ($arr as $a)
	echo sprintf("0x%02X, ", $a);
echo "\n";
echo "Array: ".implode(", ", $arr)."\n";
echo "String: ";
$str = '';
foreach ($arr as $a)
{
	$str .= sprintf("%c", $a);
}
echo $str."\n";
echo "Hex output\n";
echo hexoutput($str);

echo '</pre>';
?>

Open in new window

0
 
j-techAuthor Commented:
Thanks TDS, that worked perfectly.  Also helped with converting an integer to a single byte array to single character string.  Appreciate it!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.