Answers:
echo '0A'产生三种字符:0 A NL; xxd -b然后将以二进制形式打印这三个字符。如果您只想要值为10(即十六进制A)的单个字节,则可以编写(以bash表示):
echo -n $'\x0A'
      ^ ^  ^
      | |  |
      | |  +-- `\x` indicates a hexadecimal escape
      | +----- Inside a $' string, escapes are interpreted
      +------- -n suppresses the trailing newline更好的选择是printf '\x0A'; printf解释格式字符串中的转义序列,并且不输出隐式换行符。(这是符合POSIX标准的解决方案,它应该在任何的Posix兼容的外壳工作)。另一种可能性bash的是echo -n -e '\x0A'; (非标准)-e标志要求回显来解释转义序列。
echo '1' | xxd  -b不会输出与hex等效的结果50,因为xxd不知道这0A是一个十六进制数,1而不是。另外,该字符的ascii代码为1hex 31,而不是50。
字节序不影响字节。字节内部的位顺序完全是概念性的,直到该字节通过串行线路传输为止,即使那样,也只能在示波器或类似设备上才能看到。
是的,您可以xxd这样做,但是您可能不喜欢输入格式。在您的示例中,0x0a是ASCII换行符的十六进制值。您可以创建一个只包含一个换行符的文件,然后用于xxd创建清单:
$ xxd one_line_file
0000000: 0a                                       .xxd如果给它适当的标志,则可以从该输出中得到一个换行符:
$ echo "0000000: 0a" | xxd -r > another_one_line_file
$ xxd another_one_line_file
0000000: 0a xxd具有非常不错的输出格式,我认为使用文本编辑器创建数据包然后使用xxd -r二进制文件不会太麻烦。。
50。这是一个错字。立即修复