使用shell脚本反转十六进制数

时间:2013-10-10 06:27:55

标签: bash

我试图在bash或任何其他shell中反转十六进制数。 例如,我想反转十六进制数 4BF8E ,答案应该是 71FD2 ,即按位反转。

3 个答案:

答案 0 :(得分:3)

echo 4BF8E | rev | tr '0123456789ABCDEF' '084C2A6E195D3B7F'

说明:

  • rev将4BF8E反转为E8FB4
  • tr将每个十六进制值映射到它的位反转值

答案 1 :(得分:0)

使用以下算法:

  1. 将十六进制数转换为二进制数。
  2. 按位执行NOT。
  3. 转换回十六进制。

答案 2 :(得分:0)

一个python解决方案,(假设你需要一个字节对齐):

def bin(a):
     """ 
     For python 2 this is needed to convert a value to a bitwise string 
     in python 3 there is already a bin built in
     """
     s=''
     t={'0':'0000', '1':'0001', '2':'0010', '3':'0011',
        '4':'0100', '5':'0101', '6':'0110', '7':'0111',
        '8':'1000', '9':'1001', 'a':'1010', 'b':'1011',
        'c':'1100', 'd':'1101', 'e':'1110', 'f':'1111',
        }
     for c in hex(a)[2:]:
         s+=t[c]
     return s

def binrevers(hex):
   IntForm = int(hex, 16)
   BinForm = bin(IntForm)
   rBin = BinForm[::-1]
   Val = int(rBin, 2)
   return "%x" % Val

以交互方式尝试:

>>> binrevers("4BF8E")
'71fd2'
>>> 

如果您需要从shell执行此操作,则可以通过添加到.py文件的末尾将其扩展为脚本:

if __name__ == "__main__":
    import sys
    for i in sys.argv[1:]:
       print i, binrevers(i)