/** pack 的format * a NUL-padded string * A SPACE-padded string * h Hex string, low nibble first * H Hex string, high nibble first * c signed char * C unsigned char * s signed short (always 16 bit, machine byte order) * S unsigned short (always 16 bit, machine byte order) * n unsigned short (always 16 bit, big endian byte order) * v unsigned short (always 16 bit, little endian byte order) * i signed integer (machine dependent size and byte order) * I unsigned integer (machine dependent size and byte order) * l signed long (always 32 bit, machine byte order) * L unsigned long (always 32 bit, machine byte order) * N unsigned long (always 32 bit, big endian byte order) * V unsigned long (always 32 bit, little endian byte order) * q signed long long (always 64 bit, machine byte order) * Q unsigned long long (always 64 bit, machine byte order) * J unsigned long long (always 64 bit, big endian byte order) * P unsigned long long (always 64 bit, little endian byte order) * f float (machine dependent size and representation) * d double (machine dependent size and representation) * x NUL byte * X Back up one byte * Z NUL-padded string (new in PHP 5.5) * @ NUL-fill to absolute position */
2. [代码]使用例子-1 跳至
$out = new OutputStream(); $out->writeNumber(100); $out->writeShort(20); $out->writeStr("i love wanes",25); $out->writeChar("48"); $msg = $out->getOutStream(); echo $msg,"\n","长度:",$out->getLen(),"\n"; //*每个数据包的长度一般都是固定的 $in = new InputStream($msg); echo $in->readNumber(0)," \n "; echo $in->readShort(0+4)," \n "; echo $in->readStr(4+2,25)," \n "; echo $in->readChar(4+2+25)," \n ";
3. [代码]使用例子-2 swoole_client中发送/解析2进制
/** * Created by PhpStorm. * User: wanwan * Date: 16/4/6 * Time: 上午9:02 */ $serv = new swoole_server("127.0.0.1", 7890); $serv->set(array( 'worker_num' => 1, //工作进程数量 'daemonize' => false, //是否作为守护进程 )); $serv->on('connect', function ($serv, $fd) { echo "Client: $fd Connect.\n"; }); $serv->on('receive', function ($serv, $fd, $from_id, $data) { file_put_contents(__DIR__ . "/test.txt", $data . "\n", FILE_APPEND); $in = new InputStream($data); echo "长度 : ", $in->readNumber(0), " \n"; echo "指令 : ", $in->readNumber(4), " \n"; echo "流水号 : ", $in->readNumber(8), " \n"; echo "企业号 : ", $in->readStr(12, 6), " \n"; //echo "密钥串 : ",$in->readStr(18,16)," \n"; echo "版本号 : ", $in->readChar(18 + 16), " \n"; echo "时间戳 : ", $in->readNumber(18 + 16 + 1), " \n"; $out = new OutputStream(); $out->writeNumber(100); $out->writeShort(20); $out->writeStr("i love wanes",25); $out->writeChar("48"); $msg = $out->getOutStream(); echo $msg,"长度 :",$out->getLen(),"\n"; $serv->send($fd, $msg); $serv->close($fd); }); $serv->on('close', function ($serv, $fd) { echo "Client: $fd Close.\n"; }); $serv->start();
4. [文件] InputStram.php ~ 2KB
stream = $stream_str; } /** * 私有方法:截取流字符串 * @param $star 开始位置 * @param $len 截取长度 * @return string 返回截取好对应字段的流字符串 */ private function read($star, $len) { return substr($this->stream, $star, $len); } /** * @inheritdoc 读取一个32位的数字,注:php中int和java的long/short是对等的 * @param $star 开始位置 * @param int $len 长度,默认是int * @param bool $sign 是否是signed类型,默认不是 * @return mixed 返回一个number */ public function readNumber($star, $len = 4, $sign = false) { $temp = unpack($sign ? "l" : "N", $this->read($star, $len)); return $temp[1]; } /** * @inheritdoc 读取定长字符串 * @param $star 开始位置 * @param int $len 长度 * @param bool $sign 是否是signed类型,默认不是 * @return mixed 返回一个字符串 */ public function readStr($star, $len, $sign = false) { $format = $sign ? "a" : "A"; $temp = unpack($format . $len, $this->read($star, $len)); return $temp[1]; } /** * @inheritdoc 读取短数字 * @param $star 开始位置 * @param bool $sign 是否是signed类型,默认不是 * @return mixed 返回一个short */ public function readShort($star, $sign = false) { $temp = unpack($sign ? "s" : "n", $this->read($star, 2)); return $temp[1]; } /** * @inheritdoc 读一个字洁/字符 = java.readByte * @param $star 开始位置 * @param bool $sign 是否是signed类型,默认不是 * @return mixed 返回一个char */ public function readChar($star, $sign = false) { $temp = unpack($sign ? "c" : "C", $this->read($star, 1)); return $temp[1]; } /** * @inheritdoc 读一个字节型字符串 = java.readBytes * @param $star 开始位置 * @param int $len 长度,默认是1 * @param bool $sign 是否是signed类型,默认不是 * @return mixed 返回一个number */ public function readChars($star,$len = 1,$sign = false) { $temp = unpack($sign ? "c$len" : "C$len", $this->read($star, $len)); return $temp[1]; } }
5. [文件] OutputStream.php ~ 2KB
stream .= pack($format, $number); $this->len+=$len; }else{ $this->stream .= pack($sign?"l":"N", $number); $this->len+=4; } } /** * @inheritdoc 写入一个byte * @param $char * @param bool $sign 是否signed类型数据 * @inheritdoc 这默认是8位/1字节的char = java.writeByte */ public function writeChar($char,$sign = false) { $this->stream .= pack($sign?"c":"C", $char); $this->len+=1; } /** * @inheritdoc 字符串以byte的形式写入流 = java.writeBytes * @param $str * @param int $len 字符串长度 * @param bool $sign 是否signed类型数据 */ public function writeChars($str,$len = 1,$sign = false) { $this->stream .= pack($sign?"c$len":"C$len", $str); $this->len+=1; } /** * @inheritdoc 写定长字符串 * @param $str * @param $len 字符串长度 * @param bool $sign 是否signed类型数据 */ public function writeStr($str, $len,$sign = false) { $format =$sign? "a" : "A" ; $this->stream .= pack($format.$len, $str); $this->len+=$len; } /** * @inheritdoc 这默认是16位/2字节的short * @param $short short数据 * @param bool $sign 是否是signed类型,默认不是 */ public function writeShort($short,$sign = false) { $this->stream .= pack($sign?"s":"n", $short); $this->len+=2; } /** * @return string 返回2进制流 */ public function getOutStream() { return $this->stream; } /** * @return int获取流字节长度 */ public function getLen(){ return $this->len; } }

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.