利用串口獲取資料,是用16進制傳輸的,利用CString接收,進行轉化CString strbuf="55511400EFFF0808F809B95552000000000000F809A85553AEFF9CFF53CAF8090E5554F2F5BA0227E9F8095D"
轉化成unsigned charTemp[]={ 55,51,14,00,EF,F0,80 },最后得到charTemp[0]=55,charTemp[1]=51。類似這樣的,但是16進制的資料用CString接收之后,會改變嗎?再轉回char[]的時候,像charTemp[0]是55—字串,還是0x55。
static unsigned char chrTemp[2000];//定義緩沖區
TCHAR sz2[3] = { 0 };
int nLen = m_EditRev.GetLength() / 2;
for (int j = 0; j < nLen; j++)
{
sz2[0] = m_EditRev[j * 2];
sz2[1] = m_EditRev[j * 2 + 1];
_stscanf(sz2, _T("%s"), &chrTemp[j]);
}
除錯:
m_EditRev 的值是55511400F2FF0A
charTemp 0x001a3fb8 "5510FF0010D550" //這樣得到的值不一樣
sz2 值有問題
uj5u.com熱心網友回復:
根據我的經驗,你接收時就不應該使用CString。設計資料傳輸,一般建議采用二進制流,或者你可以看作是十六進制的數值。
你接收時也應該采用對應的二進制陣列。這樣最佳。
只有負責顯示時,可能你需要轉化成 字符形式。
uj5u.com熱心網友回復:
您好,我也在想就用char[]陣列接收進來,但是我用的MFC的MSComm來接收,看的好像有沒有用char去接收的,模塊傳輸過來的資料是16進制!這是我接收的代碼if (m_mscom.get_CommEvent() == 2)
{
CString str, str1;
CString strtemp;
unsigned char chrBuffer[2000] = {0};
long k;
short usLength = 0, usCnt = 0, uklength = 0;
VARIANT InputData = m_mscom.get_Input();
COleSafeArray fs;
fs = InputData;
uklength = fs.GetOneDimSize();
for (k = 0; k < uklength; k++)//錯誤
{
char bk[2000] = { 0 };
fs.GetElement(&k, chrBuffer + k);//將資料寫入陣列
unsigned char bt = *(char*)(chrBuffer + k); //字符型
if (m_ctrlHexReceive.GetCheck())
{
strtemp.Format(_T("%02X"), bt); //將字符以十六進制方式送入臨時變數strtemp存放,加入一個空隔可顯示
//memcpy(&bk, &strtemp, strtemp.GetLength());
//USES_CONVERSION;
//strcpy(bk, T2A(strtemp));
else
strtemp.Format(_T("%c"), bt); //將字符送入臨時變數strtemp存放
m_EditRev += strtemp; //加入接收編輯框對應字串
}
UpdateData(false);
}
uj5u.com熱心網友回復:
你這很簡單啊,你就是位元組組數轉字串嗎uj5u.com熱心網友回復:
CString strbuf="55511400EFFF0808F809B95552000000000000F809A85553AEFF9CFF53CAF8090E5554F2F5BA0227E9F8095D"轉化成unsigned charTemp[]={ 55,51,14,00,EF,F0,80 },最后得到charTemp[0]=55,charTemp[1]=51。
這里你的描述本身有問題。CString字串轉化成unsigned char應該是{'5','5','5','1',...},轉換成數字描述是{53,53,53,49,....},并不是你寫的{55,51,14,...}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37656.html
標籤:網絡及通訊開發
上一篇:深度學習的大神在哪,求救。
下一篇:oj默認捕獲模式問題
