十六进制到十进制转换(带 sed 的管道)
如何在 sed
之后使用管道将十六进制值转换为十进制值。
从“litte endian”到“big endian”的转换
dec_value=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g'`
更新:
这工作正常:
endi=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g' | tr '[a-z]' '[A-Z]'`
echo "ibase=16; $endi" | bc
但我很好奇这是否可以用一行来实现?
How can I convert my Hex value to Dec value using pipe after sed
.
Conversion from 'litte endian' to 'big endian'
dec_value=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g'`
Update:
This works fine:
endi=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g' | tr '[a-z]' '[A-Z]'`
echo "ibase=16; $endi" | bc
But I'm curious whether this is possible with one line?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在
sed
之前执行tr
并让sed
添加ibase=16;
,然后再将其全部传输到>bc
:如果您使用的是 Bash、ksh 或 zsh,则不需要
tr
和bc
:或者不需要
echo
和sed
也是如此:Do your
tr
before thesed
and havesed
add theibase=16;
before piping it all intobc
:If you're using Bash, ksh or zsh, you don't need
tr
andbc
:or without
echo
andsed
, too:这是一个不使用
bc
的解决方案,并且仅使用可移植的标准语法,没有任何特定于 Bash、zsh 或 ksh 的内容:或者,更简单一些:(
您需要
: $((...))
是可移植的;$((...))
替换其结果,并且:
允许您忽略它在 Bash 和可能的 ksh/zsh 中,您可以只使用((...))
)Here's a solution that doesn't shell out to
bc
, and uses only portable, standard syntax, nothing Bash, zsh, or ksh specific:Or, somewhat more simply:
(You need the
: $((...))
to be portable;$((...))
substitutes its result, and the:
allows you to ignore it. In Bash and likely ksh/zsh, you could just use((...))
)bc
接受全部大写。假设您可以提供全部大写:打印
1099999
否则,如果您在转换之前运行
bc
,它将打印99990901
。bc
accepts all caps. Assuming you can provide it all caps:Prints
1099999
Else if you run
bc
before you convert, it prints99990901
.