作者usherII (阿达)
看板PHP
标题[讨论] 操作Byte
时间Sat Jul 13 01:08:04 2013
小的最近在写网路程式
由於Server端的要求 要我在传过去的Json资料前加个Header
Header的格式是:
1byte(起头) +
4byte(资料长度) +
Json资料
ex.
0xBE +
0x00000008 + '
{test:0}'
於是我写了一个这样的function来取得Header
// Get Header by message
function GetHeader($msg)
{
// startByte lenBytes(4) data
// 0 1 2 3 4 5 ...
// 0xBE . 0x00000000 . '{ ... }'
$startByte =
chr(0xBE);
$lenBytes = '';
$lenBytesLength = 4; // Length of lenBytes
$tempValue = strlen($msg);
for ($i = 0; $i < $lenBytesLength; $i++)
{
$lenBytes =
chr($tempValue & 0xFF) . $lenBytes;
$tempValue = floor($tempValue >> 8);
}
return $startByte . $lenBytes;
}
目前正常work
但因为我接触PHP不久 在查资料的过程中也有发现像pack这样相关的function
但不太会用 所以想请教有经验的人
像这类操作byte传输资料的动作 有没有更好更适合的做法?
非常感谢~
--
◢ . ______ ◣ ◣ ◢
◣ ◢ ◢ ◥█◣▲◢█◤ ◣
◥ ◥ ● │GRAVEYARD. \‧◣ ◥ █
◣◢
█ ◤ ◢ ◢◤◥█◤◥◣ ◤ ◤
' \ BILE DEMON│ '◣ ◥◥
▌◤◤ ◢ ◢▌ ◣▽◢▌ ◣
▄ ▄ ̄ ̄ ̄ ̄ ̄ ̄ ◤ ◢
█▌ ◣ ◥ ▎ ◥▌ ◤ ▊
◢◢ ▌ //\ ●● ◣◥◥ ◤
◥ ◤◤◢ ◥◥ ︵ ◤◤ ◣◣
◥ ▃▇ ▆◣▂◢▂▅≡█▄ ◣ USHER ◢ Ⅲ◥◢▅◣◤Ⅲ ◤
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.181.118.207
※ 编辑: usherII 来自: 175.181.118.207 (07/13 01:30)
1F:→ chaoms:pack("CN", 0xBE, strlen($msg)); 07/13 09:15
3F:→ usherII:感谢:D 那如果连$msg一起pack 请问format参数是? 07/13 15:07
4F:→ dlikeayu:我也想学byte演算,希望有更多人能讨论这问题呢 07/13 15:19
5F:→ LPH66:>3F 直接把 1F 的结果接上 $msg 就好 07/13 15:58
6F:→ LPH66:如果不是要做二进位格式化的话就不必 pack 07/13 15:59
7F:→ usherII:Soga!! 3Q~ 07/13 16:38
8F:推 i9100:可以用就好了. 不过如果以难易程度来说, 可以考虑 07/17 15:34
9F:→ i9100:$str = sprintf("%cTEST", 0xBE); 07/17 15:35
10F:→ i9100:蛮好理解的 07/17 15:35
11F:→ i9100:或者ansi color的例子 $ESC = sprintf("%c", 27); 07/17 15:37
12F:→ i9100:"{$ESC}[1;37m推 " "{$ESC}[1;31m嘘" 07/17 15:38