MSCOMM二進位制模式讀取內容(中英混合)
中文會被處理成2個位元組,需要自己合併起來。
從串列埠收到的位元組是GBK2312編碼型別
例如:中 編碼為 :D6D0
收到兩個位元組後,需要做強制轉換才能將編碼轉為中文
但是強制轉換前,需將兩個位元組調轉一下順序,因為發來的第一個位元組是高位位元組,第二個位元組是低位位元組,即收到的是AB,
如果直接合並後轉換的話,得不到原本意義的中文,這是因為將編碼強制轉換成字串時,低位是低位元組,高位是高位元組
例如 UINT型別 4位元組, 將其強制轉為char型,一個char佔一個位元組.一個4位元組的UINT型別會被處理成一個4位元組char型。因為UINT型別初始化為0(因為字串陣列末尾需要加空字元結尾),所以在這個4位元組陣列下得到一箇中文字元
var = m_comSearial.get_Input();
safeArray = var;len = safeArray.GetOneDimSize();
UINT nTrail = 0;
UINT nCode = 0;
for (long k=0;k<len;k++)
{
safeArray.GetElement(&k,rxdata+k);
BYTE bt = *(BYTE*)(rxdata+k);
if (nTrail == 0 && _ismbblead(bt))
{
nTrail = bt;
continue;
}
else if(nTrail > 0 && _ismbbtrail(bt))
{
nCode = bt;
nCode = nCode << 8;
nCode+=nTrail;
nTrail = 0;
char *p = (char*)&nCode;
int nNumber = MultiByteToWideChar(CP_ACP,0,p,-1,NULL,0);
WCHAR *psz = new WCHAR[nNumber];
MultiByteToWideChar(CP_ACP,0,p,-1,psz,nNumber);
strTemp+=psz;
delete []psz;
}
else
{
strTemp.Format(_T("%c"),bt);
}
nCode = 0;
m_strrecv+=strTemp;
strTemp.Empty();
}
相關文章
- 【Linux】檢視二進位制檔案內容_hexdumpLinux
- C++ 讀取二進位制檔案到char*C++
- elixir二進位制模式匹配模式
- 二進位制與二進位制運算
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 讀寫二進位制資料JavaScript
- 讀入寫出,轉二進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 複製ue中的十六進位制內容
- (二進位制)
- 二進位制
- 十進位制——二 (八、十六 )進位制
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- Redis中快取二進位制資料Redis快取
- 加強版二進位制讀寫器
- Python讀寫二進位制檔案Python
- SQLite入門(二)讀寫二進位制資料SQLite
- 二進位制、十進位制與十六進位制相互轉化
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- Python 進位制互相轉換(二進位制、十進位制和十六進位制)Python
- 計算機基礎進位制轉換(二進位制、八進位制、十進位制、十六進位制)計算機
- 二進位制轉十進位制快速方法
- JAVA 二進位制,八進位制,十六進位制,十進位制間進行相互轉換Java
- 什麼是二進位制?二進位制如何轉換?
- 04 二進位制
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- JavaScript十進位制轉換為二進位制JavaScript
- Oracle二進位制與十進位制轉換Oracle
- 十進位制轉二進位制推導(草稿)
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- PHP 讀取 WORD 內容PHP
- PHP讀取WORD內容PHP
- php 擷取中英文混合字串PHP字串
- 一看就懂二進位制、八進位制、十六進位制數轉換十進位制
- python進位制轉換(二進位制、十進位制和十六進位制)及注意事項Python
- Oracle中的二進位制、八進位制、十進位制、十六進位制相互轉換函式Oracle函式