bash - 打包十六进制字符串时的不一致
问题描述
我在使用 hexdump 和 xxd 时有一些不一致的地方。当我运行以下命令时:
echo -n "a42d9dfe8f93515d0d5f608a576044ce4c61e61e" \
| sed 's/\(..\)/\1\n/g' \
| awk '/^[a-fA-F0-9]{2}$/ { printf("%c",strtonum("0x" $0)); }' \
| xxd
它返回以下结果:
00000000: c2a4 2dc2 9dc3 bec2 8fc2 9351 5d0d 5f60 ..-........Q]._`
00000010: c28a 5760 44c3 8e4c 61c3 a61e ..W`D..La...
注意“c2”字符。这也发生在我跑xxd -p
当我运行相同的命令时,除了 hexdump -C:
echo -n "a42d9dfe8f93515d0d5f608a576044ce4c61e61e" \
| sed 's/\(..\)/\1\n/g' \
| awk '/^[a-fA-F0-9]{2}$/ { printf("%c",strtonum("0x" $0)); }' \
| hexdump -C
我得到相同的结果(就包括“c2”字符而言):
00000000 c2 a4 2d c2 9d c3 be c2 8f c2 93 51 5d 0d 5f 60 |..-........Q]._`|
00000010 c2 8a 57 60 44 c3 8e 4c 61 c3 a6 1e |..W`D..La...|
但是,当我运行不带参数的 hexdump 时:
echo -n "a42d9dfe8f93515d0d5f608a576044ce4c61e61e" \
| sed 's/\(..\)/\1\n/g' \
| awk '/^[a-fA-F0-9]{2}$/ { printf("%c",strtonum("0x" $0)); }' \
| hexdump
我得到以下 [正确] 结果:
0000000 a4c2 c22d c39d c2be c28f 5193 0d5d 605f
0000010 8ac2 6057 c344 4c8e c361 1ea6
出于此脚本的目的,我宁愿使用 xxd 而不是 hexdump。想法?
解决方案
为什么不将 xxd 与 -r 和 -p 一起使用?
echo a42d9dfe8f93515d0d5f608a576044ce4c61e61e | xxd -r -p | xxd
输出
0000000: a42d 9dfe 8f93 515d 0d5f 608a 5760 44ce .-....Q]._`.W`D.
0000010: 4c61 e61e La..
推荐阅读
- email - Amazon LEX 本机电子邮件槽类型无法识别以 4 位数字结尾的电子邮件
- node.js - 将 NodeJS 缓冲区转换为整数
- core - 配置文件错误启动 Nagios 服务
- php - 如何通过类似查询对mysql结果进行排序?
- node.js - 盖茨比构建失败。无法构建“夏普”
- haskell - 免费 Monad 与显式传递函数
- angular - 角度 7:过滤后的数据不发送到子组件
- javascript - 滚动到元素总是重置视图,直到页面刷新
- node.js - 使用 npm 在 Windows 10 上安装 React 时出现问题
- php - 在 Codeigniter 上的 Controller 中 return(exit) (提前终止)(使用 Twig 模板引擎)