小議回車和換行

2021-06-06 18:09:02 字數 556 閱讀 7765

最近寫乙個網路分析的玩意,用raw_socket從網絡卡上面直接取出資料幀,然後解析,為了就是找出tftp包。解析到資料內容的時候,把資料寫出到檔案裡面,是用fprintf(xx,"%s",***)直接寫進去的,結果發現每次自己生成的檔案都比原來的檔案大。比如原檔案是100bytes,獲取到的檔案可能是108位元組。

先用 diff 檢視,發現竟然每行都顯示不同,可是我進去vim編輯的時候,看上去都是一樣的。

用 hexdump  -c 檢視,總算知道不一樣的地方了。

linux上都是以『\n』來表示換行的,ascii碼是0a,表示lr,netascii表示資料都是以成行的ascii碼字元組成的,以兩個位元組—回車字元後換行(cr/lf,0d/0a)表示行結束。這兩個行結束的字元在這種格式和本地主機使用的行定界之間進行轉化。而octet則將資料看作8bit一組的位元組流而不做解釋。

所以就處理資料的時候把cr(0d,'\r')不寫到檔案裡面,這樣得到的檔案就ok了。當然文字檔案是肯定ok了,因為文字檔案的組成就是ascii碼,都能解析出來。要是換成二進位制檔案就不一定的,裡面可能會有其他字元。起碼我這邊實現的時候二進位制檔案總是傳的不對。

回車和換行

在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。於是,研製人員想了個辦法解決這個問題,就是在每...

回車和換行

今天終於明白回車和換行的來歷了.在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。於是,研製人員...

回車和換行

回車和換行 在計算機還沒有出現之前,有一種叫做電傳打字機 teletype model 33 的玩意,每秒鐘可以打 10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去 0.2秒,正好可以打兩個字元。要是在這 0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。於是,研製人員想了個辦法解決...