Bash 如何读取字节的数值?

Bash 如何读取字节的数值?,bash,Bash,我想读一些字节值。此命令 printf '\x00\x01\x02' | how 应打印以下内容: 0 1 2 我试过这个: printf '\x00\x01\x02' | while read -rN1 BYTE ; do echo "?" ; done 但是我不知道如何获取字节的数值。使用printf而不是echo printf '\x01\x02' | while read -rN1 BYTE ; do printf '%d' "'$BYTE" ; done 请注意,printf的

我想读一些字节值。此命令

printf '\x00\x01\x02' | how
应打印以下内容:

0
1
2
我试过这个:

printf '\x00\x01\x02' | while read -rN1 BYTE ; do echo "?" ; done

但是我不知道如何获取字节的数值。

使用
printf
而不是
echo

printf '\x01\x02' | while read -rN1 BYTE ; do printf '%d' "'$BYTE" ; done

请注意,
printf
的参数中,
$BYTE
前面的单引号;这告诉
printf
打印字符的ASCII值,而不是字符本身。

问题似乎是“\00”被视为终止符。@ams是的,我也这么认为。愚蠢的C字符串。我必须更改我的示例。+1对于
“$BYTE”
的巧妙使用,但它不适用于
printf'\x00\x01\x02'
,在v4.2和v4.3之间,
read
处理输入中的
NUL
的方式发生了更改,这可能是无意中影响了
read-N1
。从4.3开始,
NULs
被忽略,除非它们恰好是行分隔符;但是,
read-N
忽略了分隔符,因此现在没有例外<代码>数值总是被忽略。由此我得出结论,chepner正在使用bash-4.2,而@anubhava已经升级到bash-4.3。不过,有一个版本可以同时使用这两种语言:
而IFS=read-d'-rn1字节;实际上,执行
4.3。然而,在我的回答中,我只是避开了空字节的整个问题,将重点放在字符到ASCII的转换上。不过,很高兴知道各种版本的
bash
如何处理空字节。