首页 > 编程知识 正文

cjson源代码下载,cjson 源码

时间:2024-04-24 11:43:25 阅读:334253 作者:WMOP

本文目录一览:

java怎么实现JSON打包UDP

java实现JSON打包UDP cJSON支持在C程序中创建和解析JSON数据,其提供多种方法供C程序使用,最直接的是将cJSON.c和cJSON.h加入到C工程中

(1) QJsonObject用于在Qt中创建JSON对象

(2)数据传输通过UDP运行

代码如下

首先在pro文件中加入

QT += network

h文件内容:

首先在pro文件中加入

QT += network

h文件内容:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include QMainWindow

#includeQtNetwork

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

QUdpSocket *sender;

QByteArray byteArray;

private slots:

void on_pushButton_clicked();

private:

Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

cpp文件内容:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#includeQJsonObject

#includeQJsonDocument

#includeQDebug

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui-setupUi(this);

sender = new QUdpSocket(this);

QJsonObject rectJson;

rectJson.insert("Type","Rectangle");

rectJson.insert("height",42);

rectJson.insert("widght",23);

QJsonDocument rectJsonDoc;

rectJsonDoc.setObject(rectJson);

byteArray = rectJsonDoc.toJson(QJsonDocument::Compact);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::on_pushButton_clicked()

{

QHostAddress address;

address.setAddress(QString("192.168.230.140"));

sender-writeDatagram(byteArray.data(),byteArray.size(),

address,4444);

}

程序通过端口4444,向IP为192.168.230.140的主机发送JSON数据

C程序如下:

{

int sock_fd;

char rcv_buff[512];

struct sockaddr_in client_addr;

struct sockaddr_in server_addr;

int client_len;

int rcv_num = -1;

if ((sock_fd = socket(AF_INET, SOCK_DGRAM,0)) 0)

{

perror("socket create errorn");

exit(1);

}

memset(server_addr,0,sizeof(struct sockaddr_in));

server_addr.sin_family = AF_INET;

server_addr.sin_port = htons(4444);

server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

client_len = sizeof(struct sockaddr_in);

if (bind(sock_fd, (struct sockaddr *)server_addr, sizeof(struct sockaddr_in)) 0)

{

perror("bind socket error.n");

exit(1);

}

while (1)

{

/*zero the buff of rvbsm and hvbsm? zhp*/

rcv_num= recvfrom(sock_fd, rcv_buff, sizeof(rcv_buff), 0, (struct sockaddr*)client_addr, client_len);

if (rcv_num0)

{

rcv_buff[rcv_num] = '';

printf("rx bsm num = %dn",rcv_num);

//printf();

printf("%s %u says: %sn",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),rcv_buff);

//parse_UDP_data(rcv_num,rcv_buff);

if(rcv_buff != NULL)

{

cJSON* pJson = cJSON_Parse(rcv_buff);

if(pJson == NULL)

{

printf("Json Parse failed.n");

return 0;

}

cJSON* pSub1 = cJSON_GetObjectItem(pJson,"Type");

cJSON* pSub2 = cJSON_GetObjectItem(pJson,"height");

cJSON* pSub3 = cJSON_GetObjectItem(pJson,"widght");

if(pSub1!=NULL)

{

printf("Type : %sn", pSub1-valuestring);

}

if(pSub2!=NULL)

{

printf("height : %dn", pSub2-valueint);

}

if(pSub3!=NULL)

{

printf("widght : %dn", pSub3-valueint);

}

}

}

else

{

perror("recv BSM errorn");

break;

}

}

close(sock_fd);

}

编译C程序:gcc -I. -lm -o rencode *.c

由于cJSON使用了标准数学库,所以在编译中需链接其库文件-lm;

在IP为192.168.230.140的Linux服务器中执行./rencode

输出结果为:

有哪些 C++ 的 JSON 库比较好

我现在用的是cJSON这个JSON库,在github上可以下载到,是开源的,Windows和Linux系统开发都可以用。而且是最轻量级的JSON库,下载下来之后再解压,只需要将里面的cJSON.c和cJSON.h这两个文件复制到你的项目(源码)目录就可以了(需要调用cJSON的那个代码文件要加上一句#include "cJSON.h")。使用起来也超简单,通过阅读cJSON.h中的函数注释和github上面的说明你就会知道怎么用。

cocos2d-x集成anychat行不行

一、功能描述、SDK版本和帐号准备

功能大致是这样的:在游戏中设置一个按钮,点击这个按钮,弹出知名社交平台的分享图标集窗口,用户选择分享目标后,相关信息分享到对应的社交平台。分享结果通知通过Toast显示在屏幕的下方。

这次依旧使用ShareSDK for Android 2.3.7版本(ShareSDK-Android-2.3.7),Cocos2d-x的版本为3.0rc2。

集成前,你需要有一个基于Cocos2d-x 3.0rc2的可运行的Android平台游戏project,我们的集成就基于该project,这里我们的project名为GameDemo,GameDemo的源码结构大致是:

复制代码 代码如下:

GameDemo/

– Classes/

– proj.android/

– Resources/

– cocos2d/

– CMakeLists.txt

– … …

使用ShareSDK前,你需要在各大主流社交平台(微信、微博)申请开发者帐号以及游戏接入权限(app_key、app_secret)等,当然在ShareSDK站点也应该有自己的帐号和应用AppKey,这些申请的审核需要几个工作日,甚至更长。

二、ShareSDK集成步骤

按照ShareSDK官方manual说法,Cocos2d-x集成ShareSDK有三种方式,之前在Cocos2d-x 2.2.2引擎中采用的是专用组件集成的方式,该组件(C2DXShareSDKSample)可以在这里下载(,该组件近期已经fix了我之前发现的bug)。

1.jar包集成

这次我们主要做微博、微信的社交分享,因此只需要微博、微信相关jar包。在C2DXShareSDKSample/proj.android/libs下,我们找到以下几个jar包:

复制代码 代码如下:

-rw-rw-r– 1 tonybai tonybai 97K 4月 8 18:10 mframework.jar

-rw-rw-r– 1 tonybai tonybai 112K 4月 8 17:39 ShareSDK-Core-2.3.7.jar

-rw-rw-r– 1 tonybai tonybai 19K 4月 8 17:39 ShareSDK-SinaWeibo-2.3.7.jar

-rw-rw-r– 1 tonybai tonybai 4.3K 4月 8 17:39 ShareSDK-Wechat-2.3.7.jar

-rw-rw-r– 1 tonybai tonybai 29K 4月 8 17:39 ShareSDK-Wechat-Core-2.3.7.jar

-rw-rw-r– 1 tonybai tonybai 4.6K 4月 8 17:39 ShareSDK-Wechat-Favorite-2.3.7.jar

-rw-rw-r– 1 tonybai tonybai 4.4K 4月 8 17:39 ShareSDK-Wechat-Moments-2.3.7.jar

把这些jar包文件Copy到GameDemo/proj.android/libs下。

2. 配置文件与资源部分集成

修改GameDemo/proj.android/AndroidManifest.xml文件,在application标签下,添加如下Activity标签:

复制代码 代码如下:

activity

android:name="cn.sharesdk.framework.ShareSDKUIShell"

android:configChanges="keyboardHidden|orientation|screenSize"

android:screenOrientation="portrait"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

android:windowSoftInputMode="stateHidden|adjustResize"

/activity

activity

android:name=".wxapi.WXEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:screenOrientation="portrait"

android:theme="@android:style/Theme.Translucent.NoTitleBar" /

将C2DXShareSDKSample/proj.android/res下的如下目录中的文件复制到GameDemo/proj.android/res下:

复制代码 代码如下:

drawable-hdpi/ drawable-ldpi/ drawable-mdpi/

drawable-xhdpi/ layout/ values/ values-en/

注意,类似icon.png这种文件就不要复制了,自己做一下判断就好。

3. C++部分代码集成

将C2DXShareSDKSample/Classes下的C2DXShareSDK文件夹Copy到GameDemo/Classes下面。

由于Cocos2d-x 3.0rc2的类命名发生了变化,我们需要对C2DXShareSDK中使用到的引擎中的类名以及方法名进行修改。但实际上Cocos2d-x 3.0rc2考虑到了一些兼容性的问题,大部分名字通过cocos2d/cocos/deprecated/CCDeprecated.h中定义的typedef得以保留,虽然这些名字已经被建议deprecated了。rc2中CCObject被改名为Ref了,这个我们需要手工在C2DXShareSDK进行修改。

另外ShareSDK组件在实现时大量使用了CCDictionary、CCArray和CCString,而这三个类在Cocos2d-x 3.0rc2中均被deprecated了,但我们依然可以使用,所以我们可以不做修改。但以后随着cocos2d-x版本的演进,这些类很可能被彻底移除出引擎,我们就需要重新使用其替代品进行实现了。

此外我们还需要手工修改一下C2DXShareSDK/Android/JSON/CCJSONConverter.cpp文件中的getObjJson方 法,因为rc2中CCDictionary、CCString、CCArray这些类的真实名称都已经换成了__Dictionary、__String 和__Array,CCDictionary、CCString、CCArray只是些typedef,因此要像下面这样做些修改(如果你是集成 cocos2d-x 2.x.x版本,则无需做下面修改):

复制代码 代码如下:

cJSON * CCJSONConverter::getObjJson(Ref * obj)

{

std::string s = typeid(*obj).name();

if(s.find("__Dictionary")!=std::string::npos){

cJSON * json = cJSON_CreateObject();

convertDictionaryToJson((CCDictionary *)obj, json);

return json;

}else if(s.find("__Array")!=std::string::npos){

cJSON * json = cJSON_CreateArray();

convertArrayToJson((CCArray *)obj, json);

return json;

}else if(s.find("__String")!=std::string::npos){

CCString * s = (CCString *)obj;

cJSON * json = cJSON_CreateString(s-getCString());

return json;

}else if(s.find("CCNumber")!=std::string::npos){

CCNumber * n = (CCNumber *)obj;

cJSON * json = cJSON_CreateNumber(n-getDoubleValue());

return json;

}else if(s.find("CCNull")!=std::string::npos){

cJSON * json = cJSON_CreateNull();

return json;

}

CCLog("CCJSONConverter encountered an unrecognized type");

return NULL;

}

CCNumber和CCNull是ShareSDK组件自己实现的类名,这里无需修改。

接下来我们需要在AppDelegate.cpp中对ShareSDK做初始化了:

复制代码 代码如下:

bool AppDelegate::applicationDidFinishLaunching() {

… …

initShareSDK();

… ..

}

void AppDelegate::initShareSDK()

{

// sina weibo

CCDictionary *sinaConfigDict = CCDictionary::create();

sinaConfigDict-setObject(CCString::create("YOUR_WEIBO_APPKEY"), "app_key");

sinaConfigDict-setObject(CCString::create("YOUR_WEBIO_APPSECRET"), "app_secret");

sinaConfigDict-setObject(CCString::create(""), "redirect_uri");

C2DXShareSDK::setPlatformConfig(C2DXPlatTypeSinaWeibo, sinaConfigDict);

// wechat

CCDictionary *wcConfigDict = CCDictionary::create();

wcConfigDict-setObject(CCString::create("YOUR_WECHAT_APPID"), "app_id");

C2DXShareSDK::setPlatformConfig(C2DXPlatTypeWeixiSession, wcConfigDict);

C2DXShareSDK::setPlatformConfig(C2DXPlatTypeWeixiTimeline, wcConfigDict);

C2DXShareSDK::setPlatformConfig(C2DXPlatTypeWeixiFav, wcConfigDict);

C2DXShareSDK::open(CCString::create("YOUR_SHARESDK_APPKEY"), false);

}

在Share按钮的事件回调函数中调用ShareSDK的接口进行社交平台分享:

复制代码 代码如下:

void GameScene::menuShareCallback(Ref* sender)

{

Dictionary *content = Dictionary::create();

content-setObject(String::create("ShareSDK for Cocos2d-x 3.0rc2社交分享测试。")

有没有谁在stm32上使用过cJSON库

源码编译一次就可以了。以后都可以不用编译的。你知道make这个工具不,只要没有被修改,文件就不会变编译。你用的是mdk还是iar?如果是mdk你只要按编译工具栏的中间那个键就是make;最右边的是编译所有文件这个就比较费时;最左边的是检查当前文件的语法。

我的等级不让插入图片如果有什么不明白的,给我留言。

linux 下c程序哪一个json库比较好用

推荐使用 cJSON, 很精巧的json解析库,只有一个头文件和一个源文件, 代码精炼,只有500多行。库中附带使用案例

如何提高 C/C++ 编程能力?

提高c和c++的最好办法是去做项目、做题。

通常学习算法的人,会不停的做题目,要做题,国内去poj,zoj吧,不会的,直接网上找答案。

然后找一些开源的项目练练手,比如

Webbench

Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:LippiOuYang/WebBench · GitHub

Tinyhttpd

Tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。下载链接链接:LippiOuYang/Tinyhttpd · GitHub

cJSON

cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。

cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。

项目主页:cJSON | SourceForge.net

Libev

libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。

l

Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。