近期笔者在对新入行的员工进行基础知识培训,在涉及到环境监测设备中如何将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;
}

打开网易新闻 查看精彩图片

对于该内容,笔者将此分享到网络,希望能够对从事相关工作的人员有所帮助。