工作中有需求是將串列埠回傳的資料給上位機,處理完之後再回傳給板子.上位機是用mfc來做的.收到的資料需要轉換成16進製制數在上位機處理過後,再轉換為ascii碼回傳.由於程式原先**的串列埠傳送函式接收的引數是cstring型別的,我處理的資料需要是char型別的.這就涉及到進製轉換的問題:
假如我想要的資料是0xcc,串列埠回傳的資料列印在螢幕上的是cc.轉換成ascii碼就是0x43,0x43.
這裡就有2個問題啦:
1.本來我要的是乙個位元組的資料,但是卻給了我兩個位元組
2.我要的是原本的資料,但是卻給了我ascii碼
這個和上面的問題是相反的關係:
1.假如我向板子寫了個 'dd',我的本意是希望板子收到0xdd,即乙個位元組的資料.但實際情況是板子收到'd'和
'd'兩個位元組.
2.收到的這兩個位元組還不是0x0d和0xd,而是0x44和0x44
cstring 是mfc提供給我們的乙個類.char是乙個基本的資料型別,它們之間是可以轉換的.
假設char * test = 「hello world」,想轉換成cstring類物件的話只需要cstring str(test);然後通過串列埠丟出去就好了.
有乙個小插曲.像上面那種轉換的話當char * 裡面的含有0x00(不是在字串末尾) 這樣的資料,cstring就是自動截斷輸出了,即如下圖所示,cstring列印出來的可能就是」a」了.解決的辦法是在cstring構造的時候手動 指定長度,即cstring str(test,3).如果是char陣列的話也可以是sizeof(test),但是不要用strlen,它也是根據』\0』來判斷字串借宿的回到上面的問題:串列埠現在傳給我了」12abcdef」,一共是 8個位元組.我想要應該是0x12,0xab,0xcd,0xef.下面就要開始進行轉換
char halftohex(byte data)
int chartohex(char * ks_str , char * ks_hex,unsigned int key_length)
return
0; }
上位機處理完資料之後需要再轉換為ascii碼回傳給板子:
char transform(unsigned char k)
int hextochar(unsigned char * input, char * output,int length)
return
0;}
這樣,資料就能準備的處理和傳遞啦 51串列埠傳送資料的格式
序列口控制暫存器scon sm0 sm1 序列口工作方式控制位 sm0 sm1 工作方式 功能 波特率 00 方式0 同步移位暫存器 fosc 12 01 方式1 8位uart 可變 t1溢位率 10 方式2 9位uart fosc 64或fosc 32 11 方式3 9位uart 可變 t1溢位率...
資料的格式和驗證問題
驗證是否為正整數 param str return public boolean validateplusint string str 驗證是否為帶兩位小數的正數 param str return public boolean validateplusdouble string str patter...
ubuntu 串列埠問題
想建立ubuntu和微控制器的通訊,串列埠很常用。但這裡遇到了幾個小問題。一 串列埠的名字。win7裡,ser serial.serial com4 115200,timeout 0.5 名字寫com口就可以了。ubuntu裡可以先 cd dev,然後 ls,插上串列埠和不插串列埠都看一遍,看看多了...