在批处理,Python或VBS中将整个文件从HEX转换为DEC

时间:2017-09-10 20:21:37

标签: batch-file

我一直在研究几个小时,但我无法弄清楚如何转换文件" hex.txt" (用十六进制)到" dec.txt"(十进制)。

Hex.txt有一堆十六进制值,如下所示:

0x0000: 0a 00 00 08 00 06 61 75 74 68 6f 72 
0x000c: 00 09 41 6e 6f 6e 79 6d 6f 75 73 09 
0x0018: 00 06 62 6c 6f 63 6b 73 0a 00 00 01 
0x0024: 5a 09 00 03 70 6f 73 03 00 00 00 03

我想用batch,vbs或python将它转换为十进制。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

批处理解决方案(为什么标题中的其他语言但没有标记?)。

  • 如果有前缀,命令set /A会将十六进制值转换为十进制 0x
  • 因此,您需要for /f将冒号处的行拆分为地址 和值以及另一个简单的for来处理每个值。
  • 设置和使用(代码块)内的值需要 delayedexpansion
> type Hex2Dec.cmd
@Echo off & Setlocal EnableDelayedExpansion
for /F "tokens=1* delims=:" %%A in (hex.txt) Do (
    Set /A DecAddr=%%A
    Set "DecAddr=     !DecAddr!"
    Set "Dec="
    For %%C in (%%B) do (
        Set /A Dec#=0x%%C
        Set "Dec#=    !Dec#!"
        Set Dec=!Dec!!Dec#:~-4!
    )
    Echo !DecAddr:~-5!: !Dec!
)

示例输出:

> Hex2Dec.cmd
    0:   10   0   0   8   0   6  97 117 116 104 111 114
   12:    0   9  65 110 111 110 121 109 111 117 115   9
   24:    0   6  98 108 111  99 107 115  10   0   0   1
   36:   90   9   0   3 112 111 115   3   0   0   0   3

答案 1 :(得分:3)

为什么是小数?很容易将每个十六进制数转换为十进制数,但您显示的十六进制格式看起来像二进制数据(我认为这是您需要的)

@echo off

set "source=.\data.txt"

del /s /q /f .\temp.data
for /f "usebackq tokens=2,3 delims=:x" %%a  in ("%source%") do (
    rem (echo(%%a %%b)>>.\temp.data
    (echo(%%a %%b)>>.\temp.data
)

certutil -decodehex -f temp.data converted

Certutil可以将十六进制转换为二进制,但它使用的格式有点不同:x所以你需要一个临时文件来清除它们。