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代码为1
hex 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
。这是一个错字。立即修复