本帖最后由 HOPE2021 于 2023-1-30 18:39 编辑
回复 1# netbenton
您的D-H函数似乎不能很好地处理有符号的数字,而且会忽略数字的高十六位。我写了一个支持有符号数并支持直接传递参数的CHex函数,请您看看?
(P.S. 最近 VB 写多了,写出来的批处理代码又慢又长)- @Echo Off & @Goto :Main
-
- :Main
- @Call :LoadFunctions
-
- SetLocal EnableExtensions EnableDelayedExpansion
-
- For /L %%I in (-64,1,63) Do (
- Set i=%%I
- %CHex:pReturn:lngDec=strHex:!i!%
- Echo.!i! 的十六进制形式是 !strHex!
- )
-
- EndLocal
-
- %CHex:pReturn:lngDec=strHex:-1%
- Echo.-1 的十六进制形式是 %strHex%
-
- %CHex:pReturn:lngDec=strHex:05347%
- Echo.05347(八进制) 的十六进制形式是 %strHex%
- @Pause > Nul
- @Exit /B
-
- :LoadFunctions
- Set "CHex=(For /F "Tokens=1,2 Delims=:" %%_ in ('Echo.pReturn:lngDec') Do (Set %%_=0 & SetLocal EnableExtensions EnableDelayedExpansion & Set "pRes=%%_" & Set /A lngTemp=%%`)) & Set "Hex=0123456789ABCDEF" & Set "strTemp=" & If !lngTemp!==0 ((For /F %%_ in ('Echo.!pRes!') Do (EndLocal & Set %%_=0))) Else ((For /L %%_ in (0,1,7) Do (If !lngTemp! Neq 0 (Set /A "bytTemp=lngTemp^&0x0000000F","lngTemp=(lngTemp^>^>4)^&0x0FFFFFFF" & (For /F %%` in ('Echo.!bytTemp!') Do (Set strTemp=!Hex:~%%`,1!!strTemp!))))) & (For /F "Tokens=1,2 Delims=:" %%_ in ('Echo.!pRes!:!strTemp!') Do (EndLocal & Set %%_=%%`)))"
- @Goto :Eof
复制代码
|