为什么要通过转动摄像头以16进制数来通讯?

有人看完电影后有一个疑惑
男主角通过一个火星探测器上可以旋转的摄像头与地球联系的时候时候采用了一种并不直观的方法,是什么方法?都可以视频了为什么要弄的这么麻烦。
总之,只有火星探测器上可以转动的摄像头可以用,要如何通过这个摄像头与地球联系?
就像两个聋子,沟通只能靠手语,结合实际情况我们该如何设计这个手语。
而且最重要的一点就是虽然摄像头可以传输视频信号,但是这个传输是单向的,只能从火星传输到地球,地球不能发送信号到火星。地球可以收到火星上的视频信号,但是火星上看不到地球上的视频信号,也就无法完成交流。(有的人脑筋转不过来)
地球上可以看到你写在纸的字,但是你该用什么来接收地球的信息呢?好像只有摄像头可以转动这点可以利用了。(当然,后来在工程师的帮助下,就可以直接接入火星探测器电脑系统通讯了,就不用这么麻烦了)
其实最直观的就是做26个英文字母的牌子,摆成一圈,摄像镜头转到哪个牌子就表示相应的字母,记录下来不就可以获取信息了吗?似乎可行,但是细想一下,表达信息26个字母好像不够,还有像数字、符号之类的,一起加起来似乎也不少了,这么多牌子摄像头转的过来吗?是不是有点密集,而且只对英语一种语言有效。一种语言有多少字就要多少个牌子??当然这是后话。
能否少用一点牌子,我们需要优化一下这个方法。目前我们也只需要考虑英文这一种语言。
现实是有相应的标准来供我们使用的,那就是ASCII(美国信息交换标准代码),不用我们来发明什么,大家都使用这个规范。影片中也有交代。

ASCII其实就是一个规定字符及其相应数值的表,字符与其相应的数值一一对应,我们只需要接收数值然后转换回字符就能得到信息了。
说到传输数字,有的人会问,不是嫌牌子多么?干嘛不用10进制而要用16进制呢?而且2进制所需要的牌子更少呢!?
我们暂且不谈牌子多少的事情。首先我们知道ASCII定义了128个字符。
如果我们使用十进制数字,那么相对应的我们就要使用0~127这些十进制数值。我们来看一下,当我们收到 ‘102103’这串数值的时候,我们遇到了一个问题该如何分开这串数字?
到底是 10 21 03 还是 102 103 呢?显然我们需要三位数才能包括ASCII的128个字符,那么我们发送数字7的时候我们需要发送007,我们发送41的时候我们需要发送041。是不是我们需要发送好多个0!发送一个字符就需要3个数字。
如果我们使用16进制呢?最大的两位16进制数是0xFF=255,远大于128,也就是说发送一个字符只需要2个16进制数字就好了。
那么我们使用2进制呢?0b1111111=127,那么我们发送一个字符需要7个二进制数字。
在电影中的问题不是发送而是接收,你需要跟着摄像头记录下摄像头指向的数字,接收一个字符用二进制需要摄像头需要转动7下,10进制需要3下,16进制只需要2下。你可能会说,虽然使用二进制数需要更多的转动,但是摄像头转动的角度和距离都更小说不定还更节省时间呢!?可是二进制并不适合人类阅读,电影中都主角是个植物学家恐怕对二进制转换不熟悉,而且ASCII表转换表上估计也没有二进制数而是十六进制数。
各种情况综合考虑,16进制就是比较好的选择。
题外话:如果我们需要传输中文怎么办?
我想就需要谈一下 unicode 以及 UTF-8 、GBK。字符集与字符编码的关系了。
推荐阅读:
随着计算机发展,有2进制、8进制、16进制,为什么没32进制、64进制?
完整内容见我的blog:https://blog.xavierskip.com/2019-02-14-code/