我需要将DLL文件转换为HEX表示形式,以将其用作字符串的一部分来创建像这样的SQL Server程序集
CREATE ASSEMBLY [AssemblyNameHere]
FROM 0x4D5A90000300000004000000FFFF000......continue binary data
WITH PERMISSION_SET = EXTERNAL_ACCESS
出于多种原因,我需要将其放在批处理文件中,但似乎 FOR 语句仅适用于文本文件。
答案 0 :(得分:4)
最简单的方法是使用CERTUTIL命令:
certutil -encodehex c:\myfile.dll myfile.hex
答案 1 :(得分:3)
使用纯批次创建十六进制输出不是一个好主意。
但你可以使用vbscript或FC.exe可以运行的简单任务。
@echo off
SETLOCAL EnableDelayedExpansion
set filesize=%~z1
set "hexVal=41"
set "x10=AAAAAAAAAA"
set /a chunks=1+filesize / 10
del dummy.txt 2>nul > nul
for /L %%n in (0,1,%chunks%) DO (
<nul >> dummy.txt set /p ".=%x10%"
)
set /a expectedNum=0
for /F "eol=F usebackq tokens=1,2 skip=1 delims=:[] " %%A in (`fc /b "%~dpf1" dummy.txt`) DO (
set /a num=0x%%A && (
set /a numDec=num-1
set "hex=%%B"
for /L %%n in (!expectedNum!=,=1 !numDec!) DO (
echo %hexVal%
)
set /a expectedNum=num+1
echo !hex!
)
)
首先我创建一个(差不多)相同长度的文件,然后我在二进制模式(/ B)中将它们与FC进行比较,扫描输出,如果检测到线路缺失,它们将填充hexVal x10字符串(在本例中为0x41 ='A')。