cjson源代碼下載,cjson 源碼

本文目錄一覽:

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 error\n”);

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] = ‘\0’;

printf(“rx bsm num = %d\n”,rcv_num);

//printf();

printf(“%s %u says: %s\n”,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 : %s\n”, pSub1-valuestring);

}

if(pSub2!=NULL)

{

printf(“height : %d\n”, pSub2-valueint);

}

if(pSub3!=NULL)

{

printf(“widght : %d\n”, pSub3-valueint);

}

}

}

else

{

perror(“recv BSM error\n”);

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行左右。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/300620.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-29 12:52
下一篇 2024-12-29 12:52

相關推薦

  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27
  • Python怎麼看源碼

    本文將從以下幾個方面詳細介紹Python如何看源碼,幫助讀者更好地了解Python。 一、查看Python版本 在查看Python源碼之前,首先需要確認Python版本。可以在命令…

    編程 2025-04-27
  • 源碼審計面試題用法介紹

    在進行源碼審計面試時,可能會遇到各種類型的問題,本文將以實例為基礎,從多個方面對源碼審計面試題進行詳細闡述。 一、SQL注入 SQL注入是常見的一種攻擊方式,攻擊者通過在輸入的參數…

    編程 2025-04-27
  • 對3ue源碼的多方面闡述

    一、3ue源碼簡述 3ue是一款基於Vue.js開發的富文本編輯器,支持圖片上傳、粘貼、表格、代碼塊等多種功能,具有輕量、可定製、易擴展的特點。下面我們將從多個方面對3ue源碼進行…

    編程 2025-04-22
  • 全面解析ptable:從使用到源碼分析

    ptable是一個輕量級的DOM操作插件,主要用於表格的操作和功能增強。它的使用非常靈活,支持多種操作方式,包括添加、刪除、修改、排序、篩選等,可以大大提高表格的效率和易用性。 一…

    編程 2025-04-22
  • 深入分析Redis源碼

    一、Redis簡介 Redis是一個開源的內存數據結構存儲系統,可以用作數據庫、緩存、消息隊列等。Redis支持多種數據類型,包括字符串、哈希、列表、集合等。Redis基於C語言進…

    編程 2025-04-12
  • JDK源碼閱讀詳解

    一、jdk源碼閱讀順序 首先,在開始閱讀JDK源碼之前,需要按照正確的順序來閱讀代碼。一般建議按照以下順序進行閱讀: 1. 先從Java SE的API入手,了解它提供了哪些功能,及…

    編程 2025-04-12

發表回復

登錄後才能評論