這是我第一次來這個論壇,我想從這個問題開始。據我所知,在 C 中,char 資料型別是 8 位長,但是當您使用這種資料型別來傳輸 ASCII 資訊時,它仍然是 8 位長,但 1 位是奇偶校驗位,對嗎?
如果這是正確的,我的問題是,你能將一個 ASCII 字符傳輸到包括奇偶校驗位的接收器嗎?因為如果我的代碼是:..... char x=0b01111000; .....收到'x',但如果我的代碼是:.... char x=0b11111000; ....它沒有收到'x',但奇偶校驗位在 1,并且我的'x'資料中有 4 個'1',所以我不知道何時使用奇偶校驗位或我的做錯了。提前感謝您的回答!
…………………………………………………………………………………………………………
uj5u.com熱心網友回復:
據我所知,在 C 語言中,char 資料型別是 8 位長,
在任何現代通用計算機上,是的,這是非常確定的。但這不是 C 本身的要求,您可以找到今天使用char的大于 8 位的機器。
但是當您使用這種資料型別來傳輸 ASCII 資訊時,仍然是 8 位長,但 1 位是奇偶校驗位,對嗎?
不,a 的所有位char都是該char值資料的一部分。它們不會用于其他目的。大多數現代傳輸介質和協議都是 8 位清潔的,這意味著它們保留了傳輸的每個 8 位單元的所有 8 位。
曾經有一些不是 8 位干凈的媒體和協議,但現在您可能遇到的唯一方法是為它顯式配置串行介面。即便如此,將其視為重新用于其他用途的資料位也是不正確的。在任何情況下,您都不會手動操作奇偶校驗位。它們在硬體中對您透明地處理。
更重要的是,您的 C 實作的默認執行字符集幾乎可以肯定不是ASCII。它很可能與ASCII 兼容,例如 UTF-8 編碼的 Unicode 或 ISO-8859 編碼系列之一,但即使這樣也不是一個安全的假設。
我不知道何時使用奇偶校驗位
你沒有。而且不能。在首先存在奇偶校驗位的情況下,您無法訪問它們。
或者我做錯了什么。
您正在手動將奇偶校驗編碼到您的資料中,并期望您以外的其他人能夠識別并關心這一點。如果您在一端手動將奇偶校驗編碼到資料中,那么您需要在另一端手動解碼。為了獲得最微小的價值,您還需要在收到奇偶校驗編碼資料時手動測驗,以捕獲發生的任何奇偶校驗錯誤。我想我從來沒有聽說過有人這樣做(在逐個字符的基礎上使用字符資料)。
uj5u.com熱心網友回復:
奇偶校驗位通常對應用程式代碼不可見,它們用于傳輸層并在后臺不可見地處理。例如,通用串行標準RS-232可以使用奇偶校驗位,但這些奇偶校驗位不會出現在資料流本身中,它們只有在您檢查實際電信號時才可見。
ASCII 是一種7 位編碼標準,不包括任何型別的奇偶校驗位。如果在您收到的字符上設定了最高位,則它可能是亂碼或無意的 UTF-8。
如果您遇到傳輸錯誤,您應該使用至少與 CRC 一樣可靠的東西來檢測它們,如果您要發送大量資料,如果不是更強大的東西,例如 SHA2-256。
uj5u.com熱心網友回復:
當您使用此資料型別 [
char] 以傳輸 ASCII 資訊時
C 標準不包括資料傳輸。如何傳輸資料的詳細資訊屬于傳輸協議的規范(無論您使用哪種協議)。
通用協議是通用的,因此通常有庫(或者可能是硬體/韌體)可以處理混亂的細節。如果您將這樣的庫用于傳輸協議,您只需以庫所需的任何格式提供資料,庫將擔心奇偶校驗位。
如果沒有這樣的庫可用,您必須查閱協議規范以了解預期的內容。每個字符可以作為 7 位加一個奇偶校驗位(不太可能)傳輸,或者可以作為 8 位加一個奇偶校驗位,甚至可以作為其他內容傳輸。對于不可靠的傳輸,單個奇偶校驗位可能不夠,因此它歸結為具有相同期望的發送方和接收方。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524596.html
標籤:C C字符少量平价
