PHP入门(5) C++和PHP二进制传输
来源:互联网 发布:linux cp复制文件夹 编辑:程序博客网 时间:2024/06/05 19:00
C++需要实现PHP端的:
bin2Hex
函数,PHP通过这种类型的字符串调用:pack
转换成PHP能识别的2进制数据。C++需要做的是实现一个bin2hex,其实只是把c++读取的2进制数据当成byte数组,把每一位转换成16进制字符串就可以了。Qt中使用sprintf无法限制2位长度,因此sprintf之后判断长度为8则截取最后3个字符串,包含了/0终止符
#ifndef PHPCLASS_H#define PHPCLASS_H#include <QObject>class PhpClass : public QObject{ Q_OBJECTpublic: explicit PhpClass(QObject *parent = 0); //字节流转换为十六进制字符串的另一种实现方式 void Bin2Hex( const char *sSrc,QString& ret, int nSrcLen ); //十六进制字符串转换为字节流 void Hex2Bin( char* source, QByteArray& ret, int sourceLen);signals:public slots:};#endif // PHPCLASS_HPhpClass::PhpClass(QObject *parent) : QObject(parent){}void PhpClass::Bin2Hex( const char *sSrc,QString& ret, int nSrcLen ){ int i; char szTmp[3]; for( i = 0; i < nSrcLen; i++ ) { sprintf( szTmp, "%02X", (unsigned char) sSrc[i] ); ret.append(szTmp); } return ;}void PhpClass::Hex2Bin( char* source, QByteArray& ret, int sourceLen){ int i; unsigned char highByte, lowByte; for (i = 0; i < sourceLen; i += 2) { highByte = toupper(source[i]); lowByte = toupper(source[i + 1]); if (highByte > 0x39) highByte -= 0x37; else highByte -= 0x30; if (lowByte > 0x39) lowByte -= 0x37; else lowByte -= 0x30; ret.push_back((highByte << 4) | lowByte); } return ;}
#ifndef FILECLASS_H#define FILECLASS_H#include <QObject>class FileClass : public QObject{ Q_OBJECTpublic: explicit FileClass(QObject *parent = 0); bool Read(char* file,QByteArray& ret); bool Write(char* file,QByteArray& data);signals:public slots:};#endif // FILECLASS_H#include "fileclass.h"#include<QFile>#include<QDebug>FileClass::FileClass(QObject *parent) : QObject(parent){}bool FileClass::Read(char*file,QByteArray& ret){ QFile mfile(file); if(!mfile.open(QIODevice::ReadOnly) ) { qDebug()<<"文件不存在"; return false; } qDebug()<<"文件存在"; ret = mfile.readAll(); mfile.close(); return true;} bool FileClass::Write(char* file,QByteArray& data) { QFile mfile(file); if(!mfile.open(QIODevice::ReadWrite) ) { qDebug()<<"文件不存在"; return false; } mfile.write(data); mfile.close(); return true; }
#include<phpclass.h>#include<fileclass.h>QVariant QmlClass::readimg(QString file){ FileClass mfile; PhpClass php; QByteArray ar; QString m; if(mfile.Read((char*)file.toStdString().c_str(),ar)) { php.Bin2Hex(ar.data(),m,ar.size()); //2进制流转16进制字符串方式1 QByteArray dates; php.Hex2Bin((char*)m.toStdString().data(),dates,m.length()); mfile.Write("./test.jpg",dates); } return m;}
function uploadimg() { var x = new XMLHttpRequest(); x.onreadystatechange =function() { if(x.readyState == 4) { if(x.status == 200) { console.log("The server replied with: " + x.responseText); txt.text = x.responseText; } } }; var xxx =new Object; var d=myapp.readimg(":/1.jpg"); console.log(typeof d) x.open("POST","http://localhost/mycode/Test/reg.php",true); console.log(d) //post请求要自己设置请求头 x.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); x.send(d); }
<?php $filename="teststream.jpg";//要生成的图片名字 $data_buff=file_get_contents("php://input"); echo $data_buff; $jpg = pack("H*",$data_buff);//得到post过来的二进制原始数据 $file = fopen("pic/".$filename,"wb");//打开文件准备写入 fwrite($file,$jpg);//写入 fclose($file);//关闭?>
使用post参数和base64编码:
function uploadimg() { var x = new XMLHttpRequest(); x.onreadystatechange =function() { if(x.readyState == 4) { if(x.status == 200) { console.log("The server replied with: " + x.responseText); txt.text = x.responseText; } } }; var xxx =new Object; var d=myapp.readimg(":/main.qml"); console.log(typeof d) x.open("POST","http://localhost/mycode/Test/reg.php",true); console.log(Qt.btoa(d)) //post请求要自己设置请求头 x.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); x.send("OBJ="+Qt.btoa(d)); }
<?php $filename = "teststream.jpg"; // 要生成的图片名字 $data_buff = base64_decode($_POST['OBJ']); $jpg = pack("H*", $data_buff); // 得到post过来的二进制原始数据 $file = fopen("pic/" . $filename, "wb"); // 打开文件准备写入fwrite($file, $jpg); // 写入fclose($file); // 关闭?>
0 0
- PHP入门(5) C++和PHP二进制传输
- php和c++socket通讯(基于字节流,二进制)
- php和c++socket通讯(基于字节流,二进制)
- php和c++socket通讯(基于字节流,二进制)
- php和c++socket通讯(基于字节流,二进制) .
- php和c++socket通讯(基于字节流,二进制)
- php 二进制
- js和php的异步传输
- PHP和MySQL 第一章 PHP快速入门
- C++、PHP和Swoole
- 初学入门 PHP 和 MySQL
- 初学入门 PHP 和 MySQL
- 初学入门 PHP 和 MySQL
- php:对象 和 引用 入门
- PHP和Mysql连接入门
- PHP入门学习5
- PHP实现XML传输
- PHP传输神器cURL
- 剑指offer 阅读笔记 左旋转字符串
- Maven – Create a fat Jar file – One-JAR example
- Leetcode Best Time to Buy and Sell Stock IV
- H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流
- 信息分析——共享经济服务模式的分析与研究
- PHP入门(5) C++和PHP二进制传输
- VSCode的MagicPython插件
- 静态函数 访问非静态变量 可以模仿 传递this指针
- HTML5 web存储—web SQL
- H264--H264编码--4
- BFC(块格式化上下文)知识点整理
- FET335X 之序--确定要用飞凌的AM335X了
- TODO二三事
- gcc -L -I -l