hexdump
似乎太聪明了,它对我来说“过度格式化”。我想从/ dev / random中取x个字节并将其作为十六进制传递。
我最好只使用标准的linux工具,这样我就不需要在每台机器上安装它(有很多)
答案 0 :(得分:64)
也许使用xxd
:
% xxd -l 16 -p /dev/random
193f6c54814f0576bc27d51ab39081dc
答案 1 :(得分:29)
小心!
hexdump
和xxd
以不同的字节序给出结果!
$ echo -n $'\x12\x34' | xxd -p
1234
$ echo -n $'\x12\x34' | hexdump -e '"%x"'
3412
http://geekandpoke.typepad.com/.a/6a00d8341d3df553ef01543533e604970c-800wi:D
答案 2 :(得分:21)
使用od(GNU系统):
$ echo abc | od -A n -v -t x1 | tr -d ' \n'
6162630a
使用hexdump(BSD系统):
$ echo abc | hexdump -ve '/1 "%02x"'
6162630a
来自http://en.wikipedia.org/wiki/Hex_dump#od_and_hexdump:
“根据您的系统类型,这两个实用程序中的任何一个或两个都可用 - BSD系统弃用oddump,GNU系统反过来。”
答案 3 :(得分:10)
也许您可以在C中编写自己的小工具,并在运行中进行编译:
int main (void) {
unsigned char data[1024];
size_t numread, i;
while ((numread = read(0, data, 1024)) > 0) {
for (i = 0; i < numread; i++) {
printf("%02x ", data[i]);
}
}
return 0;
}
然后从标准输入中提取它:
cat /bin/ls | ./a.out
您甚至可以使用heredoc语法将这个小型C程序嵌入到shell脚本中。
答案 4 :(得分:6)
所有解决方案似乎难以记忆或太复杂,我发现使用printf
最短的解决方案:
$ printf '%x\n' 256
100
[编辑]
但正如评论中所指出的,这不是作者想要的,所以下面的公平是完整答案。
...使用上面的方法输出实际的二进制数据流:
printf '%x\n' $(cat /dev/urandom | head -c 5 | od -An -vtu1)
它的作用:
printf '%x,' 1 2 3
,将打印1,2,3,
cat /dev/urandom
- 输出随机二进制数据head -c 5
- 将二进制数据限制为5个字节od -An -vtu1
- 八进制转储命令,将二进制转换为十进制作为测试用例('a'是61 hex,'p'是70 hex,......):
$ printf '%x\n' $(echo "apple" | head -c 5 | od -An -vtu1)
61
70
70
6c
65
或测试单个二进制字节,在输入时让我们给出61十进制('='char)来产生二进制数据('\\x%x'
格式就可以了),上面的命令将正确输出3d(十进制61):
$printf '%x\n' $(echo -ne "$(printf '\\x%x' 61)" | head -c 5 | od -An -vtu1)
3d
答案 5 :(得分:3)
dd + hexdump也可以使用:
dd bs=1 count=1 if=/dev/urandom 2>/dev/null | hexdump -e '"%x"'
答案 6 :(得分:3)
如果您需要大型流(无新行),可以使用tr
和xxd
(vim的一部分)进行逐字节转换。
head -c1024 /dev/urandom | xxd -p | tr -d $'\n'
或者您可以使用hexdump
(posix)进行逐字转换。
head -c1024 /dev/urandom | hexdump '-e"%x"'
请注意,区别在于字节顺序。
答案 7 :(得分:1)
这三个命令将打印相同(0102030405060708090a0b0c):
n=12
echo "$a" | xxd -l "$n" -p
echo "$a" | od -N "$n" -An -tx1 | tr -d " \n" ; echo
echo "$a" | hexdump -n "$n" -e '/1 "%02x"'; echo
鉴于n=12
和$a
是1到26之间的字节值:
a="$(printf '%b' "$(printf '\\0%o' {1..26})")"
可用于在每个程序中获取$n
个随机字节值:
xxd -l "$n" -p /dev/urandom
od -vN "$n" -An -tx1 /dev/urandom | tr -d " \n" ; echo
hexdump -vn "$n" -e '/1 "%02x"' /dev/urandom ; echo