在回答关于十六进制到(原始)二进制转换的这个问题时,评论表明它可以用"5-10行C或任何其他语言"来解决.
我确信(某些)脚本语言可以实现,并希望看到如何.对于C,我们能否证明评论是真的吗?
注意:这并不意味着十六进制到ASCII二进制 - 特别是输出应该是对应于输入ASCII十六进制的原始八位字节流.此外,输入解析器应跳过/忽略空格.
编辑(Brian Campbell)为了保持一致性,我可以提出以下规则吗?如果您认为这些内容没有帮助,请随意编辑或删除这些内容,但我认为,由于已经讨论过某些案例应该如何运作,因此一些澄清会有所帮助.
- 程序必须从stdin读取并写入stdout(我们也可以允许读取和写入在命令行上传入的文件,但我无法想象在任何语言中都会比stdin和stdout更短)
- 该程序必须仅使用您的基础包含的软件包,标准语言分发.对于C/C++,这意味着它们各自的标准库,而不是POSIX.
- 程序必须编译或运行,没有任何特殊选项传递给编译器或解释器(因此,'gcc myprog.c'或'python myprog.py'或'ruby myprog.rb'都可以,而'ruby -rscanf myprog.rb '是不允许的;要求/导入模块会计入您的字符数).
- 程序应该读取由相邻的十六进制数字对(大写,小写或混合大小写)表示的整数字节,可选地由空格分隔,并将相应的字节写入输出.每对十六进制数字首先写入最重要的半字节.
- 程序对无效输入的行为(字符除外
[a-fA-F \t\r\n],将单个字节中的两个字符分开的空格,输入中的奇数个十六进制数字)是未定义的; 任何行为(除了主动损坏用户的计算机或其他东西)都是可接受的(抛出错误,停止输出,忽略坏字符,将单个字符视为一个字节的值,都可以)
- 程序可能不会写入额外的字节输出.
- 代码按源文件中最少的总字节数进行评分.(或者,如果我们想要对原始挑战更加真实,那么得分将基于最低代码行数;在这种情况下,我会对每行施加80个字符的限制,否则你会得到一堆1线的关系).