3

我正在尝试在 Bash 或任何其他 shell 中反转十六进制数字。

例如,我想反转十六进制数4BF8E,答案应该是71FD2,即按位反转。

4

3 回答 3

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

解释:

  • rev 将 4BF8E 反转为 E8FB4
  • tr 将每个十六进制值映射到它的位反转值
于 2013-10-10T06:56:35.607 回答
0

使用以下算法:

  1. 将十六进制数转换为等效的二进制数。
  2. 执行按位非。
  3. 转换回十六进制。
于 2013-10-10T06:45:57.553 回答
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)
于 2013-10-10T06:49:06.770 回答