Linux讀二進位制串列埠資料異常,資料校驗出錯

2021-08-21 02:43:59 字數 866 閱讀 1650

今天做usb的gsensor程式發現讀到的資料總是校驗不過,無法進一步解析資料,而在windows下通過工具讀出來的資料均是正常的。

於是做出了串列埠讀上來的資料有加過工的可能,因為該sensor是以二進位制形式進行資料上報的,通常串列埠配置是以ascii碼為準,猜測有可能是將讀到的回車和換行之類的做了處理,因為便於ascii碼的字串的顯示。

於是通過遮蔽這些標誌後 , 後解決串列埠讀二進位制資料校驗錯誤問題, 也證明了猜想是正確的 。

new.c_iflag &= ~(icrnl | ixon | inlcr | igncr | ixoff | iuclc | istrip );
c_iflag:輸入模式標誌,控制終端輸入方式,具體引數如下所示。

c_iflag參數列

鍵值說明

ignbrk 忽略break鍵輸入

brkint 如果設定了ignbrk,break鍵的輸入將被忽略,如果設定了brkint ,將產生sigint中斷

ignpar 忽略奇偶校驗錯誤

parmrk 標識奇偶校驗錯誤

inpck 允許輸入奇偶校驗

istrip 去除字元的第8個位元

inlcr 將輸入的nl(換行)轉換成cr(回車)

igncr 忽略輸入的回車

icrnl 將輸入的回車轉化成換行(如果igncr未設定的情況下)

iuclc 將輸入的大寫字元轉換成小寫字元(非posix)

ixon 允許輸入時對xon/xoff流進行控制

ixany 輸入任何字元將重啟停止的輸出

ixoff 允許輸入時對xon/xoff流進行控制

imaxbel 當輸入佇列滿的時候開始響鈴,linux在使用該引數而是認為該引數總是已經設定

異或與二進位制

baobao has a sequence a 1 a 2 a n he would like to find a subset sof such that i j s a i a j a i a j and s is maximum,where means bitwise exclusive or...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

二進位制檔案 讀檔案

1.二進位制讀檔案主要是利用流物件呼叫成員函式read 2.函式原型 ifstream read char buffer,int len 引數解釋 字元指標buffer指向記憶體中一段儲存空間,len是讀寫的位元組數 include include includeusing namespace st...