色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json轉(zhuǎn)換成byte數(shù)組中

黃文隆1年前8瀏覽0評論

在嵌入式領(lǐng)域中,我們常需要將一些數(shù)據(jù)以二進(jìn)制文件的形式存儲或者發(fā)送給其他設(shè)備,如何將C語言中的JSON格式轉(zhuǎn)換成二進(jìn)制數(shù)組呢?這就需要用到C語言中的JSON解析庫,以及C語言中的位運(yùn)算。

在這里我們介紹一種常用的JSON解析庫——cJSON,它是一種輕量級的JSON解析庫,可在較小的內(nèi)存空間中運(yùn)行。

首先我們需要定義一個JSON格式的字符串。

char *json_str = "{ \"name\":\"Tom\", \"age\":18, \"gender\":\"male\" }";

接下來,我們定義一個cJSON對象,并將JSON字符串解析成cJSON對象。

cJSON *root = cJSON_Parse(json_str);

這樣我們就成功將JSON字符串轉(zhuǎn)換成了cJSON對象,接下來我們需要將cJSON對象轉(zhuǎn)換成二進(jìn)制數(shù)組。這時我們需要定義一個長度為JSON字符串長度的byte數(shù)組。

int len = strlen(json_str) + 1;
unsigned char byte_arr[len];

接下來我們需要將cJSON對象遍歷,并將其轉(zhuǎn)換成byte數(shù)組。

unsigned char *ptr = byte_arr;
void traverse(cJSON *node) {
if (cJSON_IsObject(node)) {
cJSON *child = node->child;
while (child != NULL) {
traverse(child);
child = child->next;
}
} else if (cJSON_IsString(node)) {
int len = strlen(node->valuestring);
memcpy(ptr, (void *)node->valuestring, len);
ptr += len;
} else if (cJSON_IsNumber(node)) {
memcpy(ptr, (void *)&node->valueint, sizeof(int));
ptr += sizeof(int);
}
}

代碼解釋:

首先定義一個指針,指向byte數(shù)組的開頭;

遍歷cJSON樹結(jié)構(gòu),如果當(dāng)前節(jié)點為對象,就繼續(xù)往下遍歷它的下一個child節(jié)點;

當(dāng)遍歷到葉子節(jié)點時,如果該節(jié)點為字符串類型,就將它的值拷貝到byte數(shù)組的當(dāng)前位置,并將指針往后移;

如果該節(jié)點為int類型,就將它的值拷貝到byte數(shù)組的當(dāng)前位置,并將指針往后移。

最后我們就得到了一個byte數(shù)組,其中存儲了JSON字符串的信息。

以上就是將cJSON對象轉(zhuǎn)換成byte數(shù)組的方法。通過這種方式,我們可以將C語言中的JSON格式以二進(jìn)制文件的形式存儲或者發(fā)送給其他設(shè)備。