我必須將程序從UNIX遷移到Windows。該程序是關於從串口獲取數據的。在正在接收它原來的UNIX機器,它的內容:fgets()讀取什麼?
char my_buffer_a[200];
memset(my_buffer_a, '\0', sizeof(my_buffer_a));
if (fgets(my_buffer_a, sizeof(my_buffer_a), file_p))
{
n = sscanf("%d\t%d\t...%d\n0x0A",
my_record.field1, my_record.field2, ...)
....
}
我知道,與fgets()將讀取直到EOF或換行符。這意味着在my_buffer_a中,我期待最後的'\ n'。但令我驚奇的是,還有也0x0A! (這是否意味着兩個換行符?)這是怎麼回事?
我擔心的另一件事是Unix和Windows中換行符的定義。它們在Unix和Windows中都不一樣。我的意思是我轉換後,當我做sscanf
,我將不得不做sscanf("%d\t%d\t...%d\r\n
(或sscanf(%d\t%d\t...%d\r0x0D\n0x0A
,同時保持這種奇怪的邏輯)?
你真的不知道'0x0a'是''\ n''的ASCII編碼('0x0d'是'\ r''的編碼)嗎?而Windows使用'\ r \ n'作爲文本文件行結尾,而Unix只使用'\ n''?你真的可以不知道文字基礎? – DevSolar
是的我已經檢查過0x0A和0x0D是什麼意思。正如我在代碼中所述(由其他人寫的),'sscanf'以'\ n0X0A'結尾。這意味着在原來的UNIX程序中有兩個***換行符。這是否意味着fgets()需要兩個換行符? – user3454439
以十六進制打印輸入字符串,並檢查您的假設。經驗法則:標準功能不會中斷。標準功能的文檔沒有被破壞。 – DevSolar