題:
為什麼Mark使用十六進制進行通信?
MovieMe
2015-11-13 17:17:29 UTC
view on stackexchange narkive permalink

在電影《火星人》中,馬克為什麼要使用十六進制與NASA通信?不能用0到9的數字來表示對應於字母的數字嗎?

好吧,他們使用的是完整的ASCII表,而不僅僅是字母。
嚴格來說,ASCII只有7位,而他只有8位,因此他可以使用Unicode(UTF-8編碼)中的任何字符,而不僅僅是ASCII。:-)
如果具有簡單ASCII圖表的植物學家能夠找出除基本128個ASCII字符以外的任意Unicode字符的正確UTF-8編碼,我將為@R留下深刻的印象。
@R ..原始ASCII在前32個位置中具有非打印字符。因此從技術上講,他只需要第一個數字2-7,因為在嚴格的ASCII中仍未定義8-F。由於ASCII專為英語而設計,並且他們使用英語交流,因此不需要任何花哨字符。較重的字母和其他腳本(印度語,中文等)中的字母被添加到ASCII(成為Unicode)之後。“ cafe”和“café”一樣好,他們不太可能使用帶有重音符號的單詞,也不會使用其他語言的符號。
5768792073686 Vhn 46 4220493 F.
@Mark:當然應該。(一百萬年前,當我直接在內存中以彙編語言編寫程序時,我的ascii讀起來比今天要好得多;但是我仍然可以管理)
真正的問題是,為什麼他使用十六進制+問號而不是十六進制?
現在,出現一個代碼高爾夫球問題:http://codegolf.stackexchange.com/questions/68621/create-an-ascii-to-hex-table-for-mark-watney
不,_real_問題是,為什麼他不使用Sixbit代替ascii?答:因為他不是計算機極客。sixbit的優點:只需要9張卡(8 +標記)而不是17張。他要么每張卡具有更大的扇區,要么他可以將卡僅塞進圓圈的一部分以加快傳輸速度(通過減少相機平移時間))。額外的問題:NASA如何發送連續的相同十六進制數字?
我覺得我的回答很全面,直接取自電影的原著小說。在考慮接受之前,您還有什麼想看的嗎?
八 答案:
Valorum
2015-11-13 17:22:30 UTC
view on stackexchange narkive permalink

Mark之所以選擇使用十六進制,主要是因為他的自己的能夠準確地計算出攝像機指針所指向的能力。如果他有全部26個字母(加上問題卡和空格),那麼他就有很大的機會努力確定它們的含義。加上數字0-9,情況會更糟。最重要的是,即使轉彎偏離了幾度,也幾乎不可能以任何速度進行通信。

相比之下,十六進制卡(加一張額外的卡來表示)一個問題)只需要17張卡片,數量就更容易管理了:

我們每半小時要比“是/否”問題說話更快。相機可以旋轉360度,並且我有很多天線零件。是時候製作一個字母了。但是我不能只使用字母A到Z。二十六個字母加上我的問題卡將是著陸器周圍的二十七張卡片。 每個人只能獲得13度的弧度。即使JPL完美地指向了相機,我也很有可能不知道它們的意思。

所以我必須使用ASCII。這就是計算機管理字符的方式。每個字符都有一個介於0和255之間的數字代碼。介於0和255之間的值可以表示為2個十六進制數字。通過給我幾對十六進制數字,他們可以發送喜歡的任何字符,包括數字,標點符號等。

...

ll製作0到9,A到F的卡。這將在相機周圍放置16張卡,再加上問題卡。 十七張卡片的平均高度超過21度。 火星人:安迪·威爾 sub> sup>

顯然在影片中,指針似乎在轉彎和停止時效率更高(這使他的推理無效),但這對您來說是好萊塢。

感謝@richard,,我的意思是數字0到9加上一個額外的“空格”字符,總計總計11個字符。360/11的度數應大於十六進制的360/16。例如:2Space代表B,26Space代表Z,等等
@Barry之所以選擇使用ASCII碼,是因為他和NASA已經非常熟悉它們,因為那是通過電子方式傳輸文本的方式。
完全誤解問題的答案如何獲得7票贊成?
-1
@MikeEdenfield,我甚至可以稱Mark為ASCII代碼“非常熟悉”。該書指出,他很幸運在他以前的一個同事的文件(大概是約翰森的文件)中找到ASCII表。令我煩惱的是,他們不會在所有筆記本電腦上帶上維基百科的副本。但是迪斯科?真?
@Barry在這種情況下,Z需要額外的字符來表示,因為每個字符都由空格分隔。使用每個人都熟悉並熟悉的十六進制系統意味著,每個字符,大寫和小寫,0-9和標點以及一系列空白字符都可以由一對十六進製字符表示。這包括使用“空”字符(00)表示傳輸結束。因此,大寫Z =“ 5A”,小寫Z =“ 7A”。空格=“ 20”和句號=“ 2E”,依此類推。
@moyli-您以何種方式覺得我誤解了這個問題?
問題是“為什麼Mark會使用16個符號而不是10個符號?”您正在回答一個問題:“為什麼Mark會使用16個符號而不是38個符號的符號?”
理查德使用宇宙中的信息回答,角色沒有權衡16和10的選擇;他在16到38之間選擇,這就是16的論點。這個問題的精神是否得到了解決,即使不是具體的比較,本書也沒有考慮過。
不,問題是“為什麼標記使用十六進制進行通信?”在這裡專門回答。關於是否可以使用數字代替的子問題沒有直接解決,但是我們在這裡不討論哪一種更好—這就是標記選擇十六進制的原因。
@phantom42如果我們僅依據標題,那麼網站上一半的問題可能會提出截然不同的問題。
@Moyli-為什麼Mark(整體)沒有使用您認為更“有效”的語言的問題不在站點範圍內。這將是“基於觀點”的。
但這就是問題所在。不要相信我,[OP就是這麼說的](http://scifi.stackexchange.com/questions/107675/why-does-mark-use-hexadecimal-to-communicate#comment253606_107677)。編輯問題以使其與您實際回答的內容相匹配,或者投票以基於意見的觀點將其關閉。
@Richard我認為您很難以“為什麼不X字符做這個我認為會更好的主意?”的形式來爭論問題。考慮到允許開放的網站數量太多,其中包括至少一些*來自您*的高評分答案的網站,超出了該網站的範圍。
@Richard,很好的答案。讓我煩惱的一件事是,他不需要問號卡。Ascii字母表中帶有問號...還是出於UI原因,它表示句子的實際結尾而不是隨機停止...
@Roman沒什麼可困擾您的。問號卡不是問號,但實際的答案/問號* Mark *正在發回。同樣顯而易見的是,如果您已經確定以16為基數是完全可解析的,那麼為什麼不使用10以基數傳輸數據。如果您使用10為基數,則突然需要3圈來傳輸單個字符而不是2。現在您可以選擇12為基數(ASCII只有7位),但是為什麼要使用一個完全不直觀的字符而不是簡單易用的標準呢?在這種情況下,沒有工程師會三思而後行。
Anthony Grist
2015-11-13 20:08:42 UTC
view on stackexchange narkive permalink

這是我想到使用十六進製而不是(幾乎任意)十進製到字母映射的主要原因:熟悉,因此當出現16張卡片(0-9和AF)時,意圖立即顯而易見:“我想使用十六進制進行通信。”

  • 沒有歧義。將十進制數字系統的10位數字映射到字母表中的字母即可,只要您只想使用字母表中的字母即可。在NASA和困在火星上的宇航員之間的對話中,能夠使用實際數字可能會很有用。十六進製表示字母表的每個字母,每個數字以及很多標點符號和其他符號都可以由兩位數字唯一表示。

  • 十六進制實際上是交流速度更快。如果您必須在每個字母之間使用一個“空格”,那麼您正在查看相機的前9個字母移動(如果將A映射為0,則為10個)和三個移動。對於其餘的。十六進制是每個角色兩次相機移動。

  • ol>
    儘管沒有文本來源,但如果有人問作者,我敢肯定這裡出現第3個理由。十六進制通信只會更快。另外,如果需要發送任何二進製程序,則可以將它們直接以十六進制形式發送。
    很久以前,我用hex編寫了大量代碼。如果您做了很多,這並不像看起來那麼困難。另外,在有限的帶寬內發送信息時非常有效。
    如果刪除了32個非顯示字符,則所有7位ASCII碼都可以由0-9的2位數字編碼。但是,這將需要與NASA進行額外溝通以建立新標準,而Mark卻沒有。
    Yakk
    2015-11-13 21:31:47 UTC
    view on stackexchange narkive permalink

    他不是計算機科學家。發明一種新的方式來傳輸所需的所有文本並不是一件容易的事。

    他本可以製作一個100的條目表(值00到99),並為每個條目分配一個字符。但是隨後他必須將表傳達給NASA總部, 無論如何傳輸字符都需要相同數量的消息! (每個字符2條消息)。

    僅發送01-26來編碼字母不是很好:編碼數字需要將其拼寫出來!如果他們需要溝通等(不太可能,但有可能)

    ASCII雙方都將眾所周知。無需傳輸表。它包含一個基本字符集,可讓您在一側和另一側之間傳遞大多數技術信息(包括編程)。在地球上,他們只需查看消息的原始字節,就可以在文本編輯器中鍵入消息並將其轉碼為ASCII,而無需自定義編寫軟件即可完成操作,

    總之,已經有一種眾所周知的方法,每個字符使用2個半字節進行通信。重新發明一個新的協議將容易出錯並且更加困難。一旦弧的1/17足夠大以便於區分,那麼至少在最初,降低精度沒有太大的好處。

    如前所述,達到26或36或更高會遇到精度問題(26個字母+ 10個數字+空格+ 3個符號= 40,即每個字符9個弧度)。因此,每移動一台攝像機傳送1個字母是不切實際的。每3個攝像頭移動2個字符可能是可行的,但會遇到“重新設計”問題和協議通信問題。

    同時,發送“ Use ASCII”,並標明0-9 A-F和?解決了這個問題。

    Peter Davidson
    2015-11-13 20:30:44 UTC
    view on stackexchange narkive permalink

    我懷疑部分原因是它使它看起來更加技術和令人印象深刻。

    理論上,十六進制應允許更高的帶寬-對於攝像機的每兩個位置,可以傳輸1個完整字節,並包含255個可能的字符。相反,十進制方法僅允許使用99個字符。但是,沒有任何東西(我記得)表明需要額外的帶寬,甚至沒有使用。

    更簡單的十進制系統可以輕鬆地包含26個大寫字母,26個小寫字母,數字和相關的標點符號分數。

    十六進制方法的使用依賴於ASCII表-通常只有7位。如果排除小寫字母,則僅將第一個數字中的4個值(全部16個值)用於可打印的字母。

    在可能需要額外帶寬的地方,應該定義一個包含最多-二手話。馬克很容易就能寫出一系列常用單詞,並將它們顯示在相機上。他們本可以使用12x16 = 192個單詞的詞彙,因此可以大大提高溝通速度。 Xkcd( https://xkcd.com/1133/)向我們展示了只有1000個字(10位)的完全通信是可能的。擁有192個快速單詞,並在列表中未列出的所有單詞中加上完整的拼寫,將使交流變得不再那麼乏味。對於馬克來說,弄清楚這一點並將其傳達給地球似乎也不是沒有道理的。即使只是幾個單詞也會有所幫助。

    如果他有更多的論文和一些耐心,一種更好的方法是使用3位十六進制代碼-這將給他4000個單詞,再加上字母。

    p>

    更好的辦法是採用一些簡單的霍夫曼編碼-即對頻繁的符號使用較短的代碼。他可以將最常見的單詞/字母放在第一位,以及2位或3位單詞的特殊代碼。這將給出變化的消息長度,但是用手進行解碼仍然非常可行。

    但是,所有方法中最好的方法是使用計算機算出一組最佳壓縮的數據,然後使用整個8位範圍進行傳輸。這將需要一些棘手的編程工作,而這可能超出了他的範圍-使用標準的壓縮庫效率不高,因為固定字典方法會更好。這樣,他可以達到理論上的限制,即每個字符1個位,或者攝像機的每個定位4個字符。

    但是對於讀者/觀看者來說,這可能不會那麼戲劇化。

    實際上,他們沒有必要改進“手動”通信模式,因為他們這樣做的目的只是為了修復漫遊者操作系統以使用探路者。由於完全不使用ASCII中的大多數字符,因此使用完全ASCII的HEX增加的帶寬也令人懷疑。
    他們一開始並不知道他們將能夠讓流動站進行交流。通過日誌記錄接口發送數據的技巧似乎是合理的,但是很方便。 我仍然認為,如果我等待消息以30s / char左右的速度通過,那麼我將渴望盡快採用更有效的方法。特別是因為我將有很多時間考慮它。
    彼得,對。要指出的是,他對把攝像機的位置寫下來感到有點無聊。
    如果有記憶的話,他們的確使用了一些更高級的方法,例如霍夫曼編碼...一旦地上的人幫助他以一種更有效的通信方式進行鏈接,這種通信方式就不再依賴於人與人之間的互動了……您就是不看到它是因為計算機正在為他做
    實際上是256個字符。加上多餘的問號。
    假設他沒有一本方便的書“最常見的1000個單詞”(取決於您使用的來源),那麼他和NASA就不得不浪費大量時間來傳輸所有單詞,只是為了更改為不同的協議和速度事多了。使他活著更為重要。
    就像我說的那樣,簡單的方案只需要192個單詞,他可以很容易地向攝像機顯示這些單詞。他擁有相當廣泛的參考資料,可以輕鬆地包括這樣的列表,這也不是不合理的。他也可以參考一個已知的文檔並手動或使用一些簡單的腳本來確定單詞頻率。順便說一句,我從80年代發現了一篇不錯的論文,該論文展示了一種方便的4位編碼方案-http://comjnl.oxfordjournals.org/content/24/4/324.full.pdf
    帶有deflate * format *(但不是gzip * format *或* program *)的使用非常廣泛的zlib庫確實允許(幾個)預設字典**:http://stackoverflow.com/questions/21712250/is-它可以通過靜態字典創建有效的gzip-http://stackoverflow.com/questions/15295036/is-there-a-way-to-store-gzips-dictionary-from-a-file
    Colin Q Bang
    2015-11-14 12:40:36 UTC
    view on stackexchange narkive permalink

    (我喜歡其他一些答案和評論的一部分,但是它們都有問題,所以就去...)

    “ tl; dr”?只需粗體即可獲得簡潔的版本。

    注意 b>注意 b>一些答案​​或註釋是關於“為什麼每個指針的位置不直接對應到符號-根本不是代碼。”新穎的引文(在下面,以及在理查德的答案中)解釋了這一點,但是問題只是“為什麼不使用0到9之間的數字”,即十進製而不是十六進制 i>。因此,我將從給定ASCII作為開始。 b>在尾註中,我會講一些更有效的方案,以“表示與字母相對應的數字”來引用問問者,因為我想他的意思是代碼,但可能不是ASCII。 (也許在電影中和在小說中不太清楚,那就是所使用的代碼。我不知道,我看電影的時候有點tips。 i> )


    首先回答第二部分:簡單地“是”,發送數字0到9的代碼就足夠了。在小說中,引號(感謝理查德)解釋了為什麼要使用數量有限的符號的原因是:

    “二十六個字母加上我的問題卡將是二十七個卡。著陸器。每個人只能獲得13度的弧度。即使JPL完美地對準了相機,我也很有可能不知道它們的意思。”

    這很明顯:0到9表示更少的卡片,所以也很好。其中,數字A-F表示10-15,數字位置表示相對於ASCII的16的冪(指數),而不是10),例如在另一引號中:

    “因此,我必須使用ASCII *。這是計算機管理字符的方式。每個字符都有一個介於0到255 **之間的數字代碼。值 介於0到255之間的數字可以表示為2個十六進制數字。“

    但是沒有 ASCII僅僅是一個表,用於“映射”數字到符號,以便數字可以很容易地成為0到9的更熟悉的十進制。

    第一部分-“為什麼是十六進制?” -至少在電影中沒有得到回答。最好的答案可能是一個不合常理的答案:似乎是書呆子的科學東西,這部電影很喜歡書呆子的科學家。 b>嘿,這對Ron Howard和Tom Hanks都有用。的確比10更好。 -植物主義者英雄的處境,但@Ghanima和@Peter Davidson的觀點最為突出注意,通過像火星人中那樣使用ASCII,每個指針移動16位和10位數字的可能效率被大大浪費了。為了更清楚地表明它在實際情況下的差別很小:在ASCII中,代表“空格”,0-9,A-Z(但不包括az)和除{|}〜以外的符號中的每一個的數字是小於99,因此,如果您不介意在ALLCAPS中發短信對您的馬蒂好友大聲喊叫,並且可以抵抗“擁抱” {{Matt Damon}}(您可以嗎?他很可愛!)您使用十進制的每個字符的指針移動(16)不需要超過十六進制的。 b>


    尾註:

    * b>嗨,馬克,不,您不必使用ascii。顯然,您可以將您希望他們使用的任何方法告知NASA。例如,(如果從數字角度考慮,仍然使用十六進制)一個,其中15個最常見的字母分別僅由一個“數字”(指針的移動)表示,0到F跳過1,另11個由值10到10表示。 1A。跳過值“ 1”,以便在發送該值時很明顯,它是兩位數代碼值的第一位。

    像ASCII一樣,這是一種簡單的符號編碼方案,但是大多數發送的信件將花費一半的時間。發送號碼的優先級較低(小說報價或我認為的電影中都沒有提到)。即使在ascii中,每個數字的代碼點也是兩個數字。因此,如果您要發送大量數字,而不是像在ascii和/或以前發布的註釋之一中那樣對它們進行編碼,則希望將其作為“普通數字”發送。如果幾個額外的指針位置不是太多,那麼一種簡單的方法是添加一個表示“接下來是數字的數字”和表示“接下來不是數字”的數字。不帶這些多餘位置(即僅使用可能是數字數據的代碼值)來發信號的情況,留給讀者練習。馬克只是火星上最偉大的植物學家-他可以將其留給美國宇航局的數學或計算機迷。

    ** [將書呆子眼鏡倒在鼻樑上]:實際上ASCII僅使用0-127,而不是0-255。

    Deleteman
    2015-11-13 20:20:49 UTC
    view on stackexchange narkive permalink

    那麼,假設您的意思是為什麼他們為什麼不只使用十進制的ASCII代碼而不是十六進制?

    從技術上講,他們可以,我的意思是32是空格字符,97是字母“ a”,117是“ u”,依此類推。

    所以從技術上講,馬克可以在板上寫“ ASCII使用小數”來將該消息作為圖片發送,然後僅使用其他11根天線來表示從0到9的所有10位數字和問號。

    這將為他提供一個更大的範圍,但每個ASCII表上的大多數字母都用3位數字表示(以10為基數),因此通信所需的時間會更長一些。

    這是我認為對我有意義的唯一原因,因為他們花時間發送每個字母會增加整體交流時間。

    但是現在,您得到22。是v,第22個字母?還是“ 122”,而您僅未能發現“ 1”?還是數字22?使用ASCII,您將更容易發現錯誤並且可以毫無疑問地說出更多的內容-而且所有這些只需2步而不是3步,因此在某些字符中出錯的機會減少了33%。您可以閱讀帶有一些隨機字符的文本,但總比原來少33%會更容易。
    您是說十六進制嗎?因為我不是說他不應該使用ASCII,實際上相反,我只是說他可以用十進制數字很好地表示所有ASCII字符,他只需要更多的動作即可。我想我理解您的另一點,他不知道每個字母是2位數字字符還是3 ..如果這可能是正確的答案。
    如果沃特尼(Watney)大約110歲,他可能會使用八進制。
    Hagen von Eitzen
    2015-11-15 03:44:29 UTC
    view on stackexchange narkive permalink

    大多數用於ASCII的參考圖將字符組織在一個16列16行的表中(嚴格來說,只有8行;或者可能像該歷史示例 16行和8列),使得從十六進制數字對解碼/編碼變得特別容易。

    Chris Dobson
    2020-04-26 08:18:48 UTC
    view on stackexchange narkive permalink

    無論如何,您都要用17張牌給他17個符號,無論是字母還是數字。十六進制的唯一優點是10到16的符號的十六進制(A-F)可能更窄。如果卡的間隔很重要,那根本就沒有優勢。聽起來不錯,但是這是胡說八道。

    嗨,歡迎來到SF&F。真的不清楚你在說什麼。您是否建議將卡編號為1-17?問題是為什麼要使用16(17)張牌而不是10(11)?您是否閱讀過所有先前的答案?這不是“廢話”。
    我的意思是,無論您如何表示字母,16張卡都會給您16個字母。 字母表中的前16個字母是 A B C D E F G H I J K L M N O P 在基數10中可以編碼 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 以16為底(十六進制),則為 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII代碼為(以10為底) 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 您可以使用任何您喜歡的符號代碼,但仍然只能獲得16個字母。 我已經閱讀了許多以前的答案,但不是全部。如果我錯過了重要的事情,請告訴我。
    DavidW,順便說一句,謝謝您的答复。我還要補充一點,我非常喜歡這部電影,並且我認為總體上它很好地描繪了科學。但是我從來沒有找到對這種特殊玩法(十六進製字母卡)的明智解釋。


    該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
    Loading...