首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >六角到十二度转换(带sed的管道)

问六角到十二度转换(带sed的管道)
EN

Stack Overflow用户
提问于 2010-09-09 08:38:38
回答 3查看 6.9K关注 0票数 2

如何在sed之后使用管道将十六进制值转换为Dec值。

从“小终端”到“大端”的转换

代码语言:javascript
复制
dec_value=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g'`

更新:

这样做很好:

代码语言:javascript
复制
endi=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g' | tr '[a-z]' '[A-Z]'`
echo "ibase=16; $endi" | bc

但我很好奇一句能不能做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-09 15:48:33

在tr之前执行sed,并让sed在将其全部导入bc之前添加ibase=16;

代码语言:javascript
复制
dec_value=$(echo dede0a01 | tr '[a-z]' '[A-Z]' | sed 's,\(..\)\(..\)\(..\)\(..\),ibase=16;\4\3\2\1,g' | bc)

如果使用Bash、ksh或zsh,则不需要tr和bc

代码语言:javascript
复制
(( dec_value = 16#$(echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g') ))

或者也没有echo和sed:

代码语言:javascript
复制
hex=dede0a01
(( dec_value = 16#${hex:6:2}${hex:4:2}${hex:2:2}${hex:0:2} ))
票数 1
EN

Stack Overflow用户

发布于 2010-09-09 18:39:22

这里有一个解决方案,它不向bc扩展,只使用可移植的标准语法,不使用Bash、zsh或ksh特定的内容:

代码语言:javascript
复制
dec_value=`echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g' | (read hex; echo $(( 0x${hex} )))`

或者,更简单地说:

代码语言:javascript
复制
: $(( dec_value = 0x$(echo dede0a01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g') ))

(您需要: $((...))是可移植的;$((...))替换它的结果,而:允许您忽略它。在Bash和可能的ksh/zsh中,您可以只使用((...)))

票数 1
EN

Stack Overflow用户

发布于 2010-09-09 08:56:54

bc接受所有的大写。假设您可以提供所有的上限:

代码语言:javascript
复制
endi=`echo DEDE0A01 | sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g'`
echo "obase=10; $endi" | bc

打印1099999

否则,如果在转换之前运行bc,它会打印99990901。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3675012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档