我有很多这样的串的,我想找到一个命令把它转换成ASCII码,我试着用echo -e
和od
,但没有奏效.
0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
Run Code Online (Sandbox Code Playgroud)
fun*_*oll 119
这对我有用.
$ echo 54657374696e672031203220330 | xxd -r -p
Testing 1 2 3$
Run Code Online (Sandbox Code Playgroud)
-r
告诉它将hex转换为ascii而不是正常的反向模式
-p
告诉它使用普通格式.
Dan*_*iss 20
此代码将文本0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
转换为具有等效值的11个字节的流.这些字节将写入标准输出.
TESTDATA=$(echo '0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2' | tr '.' ' ')
for c in $TESTDATA; do
echo $c | xxd -r
done
Run Code Online (Sandbox Code Playgroud)
正如其他人所指出的那样,由于指定字节不是ASCII的简单原因,这不会产生可打印的ASCII字符串.您需要发布有关如何获取此字符串的更多信息,以便我们为您提供帮助.
工作原理:xxd -r将十六进制数据转换为二进制数据(如反向hexdump).xxd要求每一行都以行上第一个字符的索引号开始(在某些内容上运行hexdump,并查看每行是如何以索引号开始的).在我们的例子中,我们希望该数字始终为零,因为每次执行只有一行.幸运的是,我们的数据在每个字符之前已经有零作为0x表示法的一部分.小写x被xxd忽略,所以我们要做的就是将每个0xhh字符传递给xxd并让它完成工作.
tr将句点转换为空格,以便将其正确分割.
小智 10
您可以使用xxd
:
$cat hex.txt
68 65 6c 6c 6f
$cat hex.txt | xxd -r -p
hello
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用类似这样的东西。
$ cat test_file.txt
54 68 69 73 20 69 73 20 74 65 78 74 20 64 61 74 61 2e 0a 4f 6e 65 20 6d 6f 72 65 20 6c 69 6e 65 20 6f 66 20 74 65 73 74 20 64 61 74 61 2e
$ for c in `cat test_file.txt`; do printf "\x$c"; done;
This is text data.
One more line of test data.
Run Code Online (Sandbox Code Playgroud)
您提供的值是UTF-8值。设置后,数组为:
declare -a ARR=(0xA7 0x9B 0x46 0x8D 0x1E 0x52 0xA7 0x9B 0x7B 0x31 0xD2)
Run Code Online (Sandbox Code Playgroud)
将被解析以打印每个值的纯文本字符。
for ((n=0; n < ${#ARR[*]}; n++)); do echo -e "\u${ARR[$n]//0x/}"; done
Run Code Online (Sandbox Code Playgroud)
输出将产生一些可打印的字符和一些不可打印的字符,如下所示:
使用echo
命令将十六进制值转换为纯文本:
echo -e "\x<hex value here>"
Run Code Online (Sandbox Code Playgroud)
并使用以下echo
命令将UTF-8值转换为纯文本:
echo -e "\u<UTF-8 value here>"
Run Code Online (Sandbox Code Playgroud)
然后使用以下echo
命令将八进制转换为纯文本:
echo -e "\0<octal value here>"
Run Code Online (Sandbox Code Playgroud)
当您不熟悉编码值时,请花一些时间检查常见编码方案中的范围,以确定值属于哪种编码。然后从那里转换。