天天看點

數組與QByteArray的互相轉化

在實際工作中,涉及到了“數組”與QByteArray的轉化問題,現總結一下。

以int數組為例,代碼如下:

//int數組→QByteArray
unsigned int unArrs[10];
for (int i(0); i<10; i++)
{
	unArrs[i] = i * i;
}

QByteArray arrTest;
arrTest.append((char*)unArrs, sizeof(unsigned int) * 10);

//QByteArray→int數組
unsigned unArrTest[10];
for (int i(0); i<10; i++)
{
	unsigned int unTemp;
	memcpy(&unTemp, arrTest.data() + sizeof(unsigned int) * i, sizeof(unsigned int));
	unArrTest[i] = unTemp;
}
           

從上述示例代碼中,可以發現,對于普通的數組,如果想要轉化為QByteArray,可以直接使用QByteArray的append函數(這裡需要注意,第一個參數需要轉化為char*類型,後面的第二個參數是數組總共所占的位元組數)。

而對于QByteArray轉化為想要的數組,個人建議采用memcpy的方式,因為記憶體的直接拷貝是以位元組為機關的,不需要考慮到大小端序的問題。隻要能定位到你想要的值的位置,就可以拷貝過來。

上述代碼是以int類型的數組為例的,對于其他類型的數組,同樣可以采用這種方式,隻需要更改一下每次添加的大小,或者是每次偏移的大小即可。

繼續閱讀