[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content-transport-mp3-via-paper":3,"$fwjvmqv9j1ooj":22},{"id":4,"type":5,"slug":6,"title":7,"date":8,"category":9,"tags":10,"body_markdown":15,"permalink":16,"excerpt_src":16,"media_type":16,"media_title":16,"media_author":16,"media_url":16,"rating":16,"layout":16,"pv":17,"admin_only":17,"created_at":18,"updated_at":18,"deleted_at":16,"status":19,"html":20,"cover":21},112,"article","transport-mp3-via-paper","关于用纸笔发送mp3的答案","2010-05-02 09:57:57","life",[11,12,13,14],"信息","纸笔","数据","传输","\n前一阵突发奇想，我们已经融入了数码生活，但是数码生活能不能用传统的事物作为载体？于是想到用纸笔怎么传递MP3的问题。\n\n原题是这样的：\n\n> 一台电脑，一个50k的mp3文件，一支笔，一打纸，一个信封，一张邮票，没有网络，要把这个mp3文件用这些东西无损发给别人，保持md5不变，怎么做？\n\n很多同学给我的答案是直接记录二进制编码，从原理上来讲不错，但是给你一个MP3文件，你能直接给我它的二进制编码么？（如果能，那么高手您就不用往下看了。）\n\n其实是很容易的，但是大家几乎都不这样做，因为没有必要。用个软件——WINHEX即可，搜一下满世界都可以下载。\n\n我们用WINHEX打开一个MP3文件（其实任何文件都可以），左边可以看到类似“AA FF CD 80”之类的，这便是文件的二进制代码的十六进制表示法，也就是说因为二进制占的屏幕空间太大，就换成16进制表示了，每位16进制代码4位二进制代码，每两位十六进制（8位二进制）表示一个字节，比如A是十进制10，二进制表示为1010，AA表示十进制170，二进制为10101010。于是我们用纸把十六进制抄下来，让对方用WINHEX新建一个文件，把十六进制代码打进去，保存为MP3就可以了。\n\n有兴趣的同学试一下在WINHEX中新建文件，大小为40Bytes，左边输入（不要粘贴）\n\n\t68 74 74 70 73 3A 2F 2F    63 68 75 61 6E 67 71 69\n\t61 6E 67 2E 62 69 7A 2F    77 2E 70 68 70 3F 70 3D\n\t37 35 34 35 37 41 33 41\n\n然后保存为TXT格式。（这是一个翻和谐墙工具的邀请，先看到的先得，拿到了麻烦告诉我一声。）\n\n通过这个示例可以看到这种方法传递文件是可行的。不过我承认我在题目中写的50K对于这样的手工操作确实工作量很大。\n\nWINHEX看到文件的二进制代码还能做很多事情，比如通过头几个字母判断文件类型（如BMP文件开头一定是字符BM对应的十六进制42 4D），比如直接修改文件（如BMP，根据位深，改相应的字节就可以控制某个像素颜色），比如可以比较两个文件异同（如WPS和WORD创建的DOC文件在结构上有很大差异，而WPS创建的WPS和DOC文件结构完全一样）等等。\n\n好了，第一个方法就说到这里，其实我本来是想说第二个方法的。有个小工具叫ANY2BAT，下载地址[http:\u002F\u002Fzzzevazzz.bokee.com\u002F5913260.html](http:\u002F\u002Fzzzevazzz.bokee.com\u002F5913260.html)。\n\n这个工具的用法——直接把任何文件拖到图标上，就会生成一个.bat文件，运行.bat文件又会生成原来的文件，所以叫any2bat。那它有什么用呢？它的作用可以概括为“把任何文件变成可打印字符”。不好理解吧？这么说吧，如果某个论坛上不让你上传附件，但是你要跟人共享一个小的图片，怎么办呢？把它用any2bat处理一下，然后用记事本打开bat文件，复制，粘贴就可以了。\n\n回到题目，把MP3拖上去，再把bat文件的内容抄写下来就OK。\n\n其实关于any2bat，重点也不在讲它有多神奇，而在于它用了BASE64编码，这个编码的原理是把3个相连的字节平分成4份，这样每份是6位，因为2^6=64，所以可以选择64个字符来表示每6位的编码，这样3个字节就变成了4个可打印字符。具体的技术细节参见[http:\u002F\u002Fbaike.baidu.com\u002Fview\u002F469071.htm](http:\u002F\u002Fbaike.baidu.com\u002Fview\u002F469071.htm)。有了这种编码，任何文本和文件的传输都变得可能了（虽然不一定方便）。事实上BASE64在邮件中用得非常广泛，因为现行的SMTP协议出现比较早，没有考虑到中文编码、附件等等，所以有中文、附件的电子邮件基本上都会用BASE64编码后传输。当然，3变4是会增大体积的。这就是我们经常看到邮件附件体积比真实体积大的原因。\n\n突然觉得我在做科普了，呵呵。\n\n最后，关于数码世界与真实世界，大家做的工作基本都是把真实世界的生活带到数码世界中去，然而，有一位很牛的人物在做的工作却是将数码世界带到现实世界中，而且已经做得非常好了，我当时看完的感觉是：不可思议，太神奇了！\n\n视频演示地址[http:\u002F\u002Fwww.ted.com\u002Ftalks\u002Flang\u002Fchi_hans\u002Fpranav_mistry_the_thrilling_potential_of_sixthsense_technology.html](http:\u002F\u002Fwww.ted.com\u002Ftalks\u002Flang\u002Fchi_hans\u002Fpranav_mistry_the_thrilling_potential_of_sixthsense_technology.html)。语言是英语，点一下下面的“SUBTITLES”，选择CHINESE，就可以显示中文字幕。\n\n> 抒寒居网站写博客功能还在DEMO阶段，尚不能发图，所以没有配图……\n",null,0,"2026-08-28 04:37:17","published","\u003Cp>前一阵突发奇想，我们已经融入了数码生活，但是数码生活能不能用传统的事物作为载体？于是想到用纸笔怎么传递MP3的问题。\u003C\u002Fp>\n\u003Cp>原题是这样的：\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>一台电脑，一个50k的mp3文件，一支笔，一打纸，一个信封，一张邮票，没有网络，要把这个mp3文件用这些东西无损发给别人，保持md5不变，怎么做？\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>很多同学给我的答案是直接记录二进制编码，从原理上来讲不错，但是给你一个MP3文件，你能直接给我它的二进制编码么？（如果能，那么高手您就不用往下看了。）\u003C\u002Fp>\n\u003Cp>其实是很容易的，但是大家几乎都不这样做，因为没有必要。用个软件——WINHEX即可，搜一下满世界都可以下载。\u003C\u002Fp>\n\u003Cp>我们用WINHEX打开一个MP3文件（其实任何文件都可以），左边可以看到类似“AA FF CD 80”之类的，这便是文件的二进制代码的十六进制表示法，也就是说因为二进制占的屏幕空间太大，就换成16进制表示了，每位16进制代码4位二进制代码，每两位十六进制（8位二进制）表示一个字节，比如A是十进制10，二进制表示为1010，AA表示十进制170，二进制为10101010。于是我们用纸把十六进制抄下来，让对方用WINHEX新建一个文件，把十六进制代码打进去，保存为MP3就可以了。\u003C\u002Fp>\n\u003Cp>有兴趣的同学试一下在WINHEX中新建文件，大小为40Bytes，左边输入（不要粘贴）\u003C\u002Fp>\n\u003Cpre>\u003Ccode>68 74 74 70 73 3A 2F 2F    63 68 75 61 6E 67 71 69\n61 6E 67 2E 62 69 7A 2F    77 2E 70 68 70 3F 70 3D\n37 35 34 35 37 41 33 41\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>然后保存为TXT格式。（这是一个翻和谐墙工具的邀请，先看到的先得，拿到了麻烦告诉我一声。）\u003C\u002Fp>\n\u003Cp>通过这个示例可以看到这种方法传递文件是可行的。不过我承认我在题目中写的50K对于这样的手工操作确实工作量很大。\u003C\u002Fp>\n\u003Cp>WINHEX看到文件的二进制代码还能做很多事情，比如通过头几个字母判断文件类型（如BMP文件开头一定是字符BM对应的十六进制42 4D），比如直接修改文件（如BMP，根据位深，改相应的字节就可以控制某个像素颜色），比如可以比较两个文件异同（如WPS和WORD创建的DOC文件在结构上有很大差异，而WPS创建的WPS和DOC文件结构完全一样）等等。\u003C\u002Fp>\n\u003Cp>好了，第一个方法就说到这里，其实我本来是想说第二个方法的。有个小工具叫ANY2BAT，下载地址\u003Ca href=\"http:\u002F\u002Fzzzevazzz.bokee.com\u002F5913260.html\">http:\u002F\u002Fzzzevazzz.bokee.com\u002F5913260.html\u003C\u002Fa>。\u003C\u002Fp>\n\u003Cp>这个工具的用法——直接把任何文件拖到图标上，就会生成一个.bat文件，运行.bat文件又会生成原来的文件，所以叫any2bat。那它有什么用呢？它的作用可以概括为“把任何文件变成可打印字符”。不好理解吧？这么说吧，如果某个论坛上不让你上传附件，但是你要跟人共享一个小的图片，怎么办呢？把它用any2bat处理一下，然后用记事本打开bat文件，复制，粘贴就可以了。\u003C\u002Fp>\n\u003Cp>回到题目，把MP3拖上去，再把bat文件的内容抄写下来就OK。\u003C\u002Fp>\n\u003Cp>其实关于any2bat，重点也不在讲它有多神奇，而在于它用了BASE64编码，这个编码的原理是把3个相连的字节平分成4份，这样每份是6位，因为2^6=64，所以可以选择64个字符来表示每6位的编码，这样3个字节就变成了4个可打印字符。具体的技术细节参见\u003Ca href=\"http:\u002F\u002Fbaike.baidu.com\u002Fview\u002F469071.htm\">http:\u002F\u002Fbaike.baidu.com\u002Fview\u002F469071.htm\u003C\u002Fa>。有了这种编码，任何文本和文件的传输都变得可能了（虽然不一定方便）。事实上BASE64在邮件中用得非常广泛，因为现行的SMTP协议出现比较早，没有考虑到中文编码、附件等等，所以有中文、附件的电子邮件基本上都会用BASE64编码后传输。当然，3变4是会增大体积的。这就是我们经常看到邮件附件体积比真实体积大的原因。\u003C\u002Fp>\n\u003Cp>突然觉得我在做科普了，呵呵。\u003C\u002Fp>\n\u003Cp>最后，关于数码世界与真实世界，大家做的工作基本都是把真实世界的生活带到数码世界中去，然而，有一位很牛的人物在做的工作却是将数码世界带到现实世界中，而且已经做得非常好了，我当时看完的感觉是：不可思议，太神奇了！\u003C\u002Fp>\n\u003Cp>视频演示地址\u003Ca href=\"http:\u002F\u002Fwww.ted.com\u002Ftalks\u002Flang\u002Fchi_hans\u002Fpranav_mistry_the_thrilling_potential_of_sixthsense_technology.html\">http:\u002F\u002Fwww.ted.com\u002Ftalks\u002Flang\u002Fchi_hans\u002Fpranav_mistry_the_thrilling_potential_of_sixthsense_technology.html\u003C\u002Fa>。语言是英语，点一下下面的“SUBTITLES”，选择CHINESE，就可以显示中文字幕。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>抒寒居网站写博客功能还在DEMO阶段，尚不能发图，所以没有配图……\u003C\u002Fp>\n\u003C\u002Fblockquote>\n","",{"total":17,"totalRoots":17,"comments":23,"pv":17},[]]