在電影《火星人》中,馬克為什麼要使用十六進制與NASA通信?不能用0到9的數字來表示對應於字母的數字嗎?
在電影《火星人》中,馬克為什麼要使用十六進制與NASA通信?不能用0到9的數字來表示對應於字母的數字嗎?
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>
顯然在影片中,指針似乎在轉彎和停止時效率更高(這使他的推理無效),但這對您來說是好萊塢。
這是我想到使用十六進製而不是(幾乎任意)十進製到字母映射的主要原因:熟悉,因此當出現16張卡片(0-9和AF)時,意圖立即顯而易見:“我想使用十六進制進行通信。”
沒有歧義。將十進制數字系統的10位數字映射到字母表中的字母即可,只要您只想使用字母表中的字母即可。在NASA和困在火星上的宇航員之間的對話中,能夠使用實際數字可能會很有用。十六進製表示字母表的每個字母,每個數字以及很多標點符號和其他符號都可以由兩位數字唯一表示。
十六進制實際上是交流速度更快。如果您必須在每個字母之間使用一個“空格”,那麼您正在查看相機的前9個字母移動(如果將A映射為0,則為10個)和三個移動。對於其餘的。十六進制是每個角色兩次相機移動。
他不是計算機科學家。發明一種新的方式來傳輸所需的所有文本並不是一件容易的事。
他本可以製作一個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和?解決了這個問題。
我懷疑部分原因是它使它看起來更加技術和令人印象深刻。
理論上,十六進制應允許更高的帶寬-對於攝像機的每兩個位置,可以傳輸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個字符。
但是對於讀者/觀看者來說,這可能不會那麼戲劇化。
(我喜歡其他一些答案和評論的一部分,但是它們都有問題,所以就去...)
“ 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。
那麼,假設您的意思是為什麼他們為什麼不只使用十進制的ASCII代碼而不是十六進制?
從技術上講,他們可以,我的意思是32是空格字符,97是字母“ a”,117是“ u”,依此類推。
所以從技術上講,馬克可以在板上寫“ ASCII使用小數”來將該消息作為圖片發送,然後僅使用其他11根天線來表示從0到9的所有10位數字和問號。
這將為他提供一個更大的範圍,但每個ASCII表上的大多數字母都用3位數字表示(以10為基數),因此通信所需的時間會更長一些。
這是我認為對我有意義的唯一原因,因為他們花時間發送每個字母會增加整體交流時間。
大多數用於ASCII的參考圖將字符組織在一個16列16行的表中(嚴格來說,只有8行;或者可能像該歷史示例 16行和8列),使得從十六進制數字對解碼/編碼變得特別容易。
無論如何,您都要用17張牌給他17個符號,無論是字母還是數字。十六進制的唯一優點是10到16的符號的十六進制(A-F)可能更窄。如果卡的間隔很重要,那根本就沒有優勢。聽起來不錯,但是這是胡說八道。