環境監測裝置中UTF8轉為Ucs2編碼方法
近期筆者在對新入行的員工進行基礎知識培訓,在涉及到環境監測裝置中如何將UTF-8轉為UCS-2問題時,筆者將此內容整理成文件,供後期員工作參考。
什麼是環境監測裝置?
環境監測裝置是基於物聯網技術下,利用溫溼度感測器、光照感測器等將相關資料透過通訊模組和網路傳遞至雲端後臺,幫助使用者實時瞭解資產的具體狀況。目前環境監測裝置主要應用於:農業種植、養殖業、生鮮冷鏈、藥物運輸等。例如,在農業大棚內,利用雲息環境監測裝置能夠監測大棚內的溫溼度、光照資料等,用科學化方式幫助農戶增產增量。
在環境監測裝置中為何需要將UTF-8轉為UCS2?
UTF8是一種變長的編碼方式,使用1-6個位元組表示一個字元。
UCS2是Unicode編碼的一種方式,Unicode只是一個符號集, 它規定了符號的二進位制程式碼, 沒有規定這個二進位制程式碼應該如何儲存,UCS2定義只用2個位元組儲存,UCS4則使用4個位元組儲存。程式碼檔案經常會用UTF8編碼格式,而簡訊中會經常會用到UCS2編碼,
UTF-8轉為UCS2的具體方法:
INT16S Utf8_To_Ucs2(const INT8U* pInput,const INT16U Len,bool BigE, INT8U *pUcs2)
{
INT8U b1, b2, b3, utfbytes;
INT8U OutBuf[BUF_MAX_LEN];
INT8U *pOutput = OutBuf;
INT16U Cnt = 0,UcsLen = 0;
if(pInput == NULL || pUcs2 == NULL) return -1;
while(Cnt < Len)
{
utfbytes = Get_Utf8_Size(*pInput);
Cnt += utfbytes;
UcsLen += 2;
//UART_PRINT(“utfbytes:%d %d\r\n”,utfbytes,*pInput);
switch ( utfbytes )
{
case 1:
if(BigE)
{
*(pOutput++) = 0;
*(pOutput++) = *(pInput++);
}else{
*(pOutput++) = *(pInput++);
*(pOutput++) = 0;
}
break;
case 2:
b1 = *(pInput++);
b2 = *(pInput++);
if ( (b2 & 0xE0) != 0x80 )
return -1;
if(BigE)
{
*(pOutput++) = (b1 >> 2) & 0x07;
*(pOutput++) = (b1 << 6) + (b2 & 0x3F);
}else{
*(pOutput++) = (b1 << 6) + (b2 & 0x3F);
*(pOutput++) = (b1 >> 2) & 0x07;
}
break;
case 3:
b1 = *(pInput++);
b2 = *(pInput++);
b3 = *(pInput++);
if ( ((b2 & 0xC0) != 0x80) || ((b3 & 0xC0) != 0x80) )
return -1;
if(BigE)
{
*(pOutput++) = (b1 << 4) + ((b2 >> 2) & 0x0F);
*(pOutput++) = (b2 << 6) + (b3 & 0x3F);
}else{
*(pOutput++) = (b2 << 6) + (b3 & 0x3F);
*(pOutput++) = (b1 << 4) + ((b2 >> 2) & 0x0F);
}
break;
default:
return -1;
break;
}
}
UcsLen = HexToAscii(pUcs2,OutBuf,UcsLen);
return UcsLen;
}
對於該內容,筆者將此分享到網路,希望能夠對從事相關工作的人員有所幫助。