文章目錄
- 關於位元組序的大端小端在這裡不再闡述, 作者假定讀者已經瞭解其中編碼原理, 貼代碼(詳細見RLIB源碼, 實現簡單):
關於位元組序的大端小端在這裡不再闡述, 作者假定讀者已經瞭解其中編碼原理, 貼代碼(詳細見RLIB源碼, 實現簡單):
typedef __declspec(align(1)) struct WCHARStruct{CHAR High;CHAR Low;}*PWCHARStruct;
To Unicode (Big-Endian):
if (codepage == Text::UTF16FEncoding::CodePage){MemoryStream *pUtf16F = new MemoryStream(length * sizeof(WCHAR));//替換高低兩位auto pUtf16FData = (WCHAR *)pUtf16F->ObjectData, pUtf16Data = (WCHAR *)src;pUtf16F->Length = length * sizeof(WCHAR);//byteslength--;//基址by 0while(length >= 0){((PWCHARStruct)(&pUtf16FData[length]))->High = ((PWCHARStruct)(&pUtf16Data[length]))->Low;((PWCHARStruct)(&pUtf16FData[length]))->Low = ((PWCHARStruct)(&pUtf16Data[length]))->High;length--;}return pUtf16F;} //if
To Unicode:
if (codepage == Text::UTF16FEncoding::CodePage){MemoryStream *pUtf16 = new MemoryStream(length);//替換高低兩位auto pUtf16Data = (WCHAR *)pUtf16->ObjectData, pUtf16FData = (WCHAR *)src;if ((length % 2) != 0){ length--;//資料丟失?assert(!"不合法的資料長度");}pUtf16->Length = length;//bytes(length /= 2)--;//WCHAR size = 2, 基址by 0while(length >= 0){((PWCHARStruct)(&pUtf16Data[length]))->High = ((PWCHARStruct)(&pUtf16FData[length]))->Low;((PWCHARStruct)(&pUtf16Data[length]))->Low = ((PWCHARStruct)(&pUtf16FData[length]))->High;length--;}return pUtf16;} //if