标题: [数值计算] [已解决]批处理实现10进制大数转16进制 [打印本页]
作者: SunTB 时间: 2009-10-8 16:40 标题: [已解决]批处理实现10进制大数转16进制
具体情况如下:
因为要写一个注册某软件的批处理,需要将序列号(纯数字)转换为对应的16进制,经过系列换算后再将新的16进制数据再转回10进制
比如:
2319692668
转换成16进制后应该是
8a43b37c
反过来16进制的
8a43b37c
转换成10进制应该是
2319692668
但是我在CMD中用set /a 0x8a43b37c得到的结果却是
-1975274628
这是怎么回事?
[ 本帖最后由 SunTB 于 2009-10-8 21:11 编辑 ]
作者: keen 时间: 2009-10-8 17:05 标题: 回复 1楼 的帖子
请使用关键字“进制”搜索,搜索范围为“搜索所有开放的版块”。
作者: SunTB 时间: 2009-10-8 17:13
在发帖前已搜索并查看相关的帖子,也下载了一些其中的代码测试,仍未找到问题所在
用网页版的转换工具结果如下
[attach]1908[/attach]
作者: netbenton 时间: 2009-10-8 17:29
在cmd里,大于0x80000000的数为负数,所以要再转会来可不是件容易的事哦!
作者: SunTB 时间: 2009-10-8 17:39
原帖由 netbenton 于 2009-10-8 17:29 发表
在cmd里,大于0x80000000的数为负数,所以要再转会来可不是件容易的事哦!
原来是这样 有办法解决吗?
作者: Seter 时间: 2009-10-8 17:50
高精度...要不你就把它分成两个数把我可以做个第三方来解决...wait a minute
[ 本帖最后由 Seter 于 2009-10-8 18:21 编辑 ]
作者: SunTB 时间: 2009-10-8 21:04
从CN-DOS的terse处得到一代码(如下)
经测试10进制转16进制没问题了
至于16进制转10进制我自己再琢磨一下
如果大家有好用的代码也可以贴上来帮忙下
- @echo off&setlocal enabledelayedexpansion
- set/p s=请输入十进制数:
- set/p x=请输入转换进制:
- set "str=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_@"
- :lp
- set /a "n=8189,m=0,r=0"
- for /l %%a in (1,1,14) do (
- set /a "u=(n+m)/2"
- for %%i in (!u!) do if "!s:~%%i!" equ "" (set /a n=u) else set /a m=u
- )
- for /l %%i in (0,1,%u%) do (
- set/a "n=!s:~%%i,1!+(r*10),r=n%%x,n/=x"
- set v=!v!!n!
- )
- set b=!str:~%r%,1!!b!
- for /f "tokens=* delims=0" %%i in ("0!v!") do set "s=%%i"
- if defined s set v=&goto lp
- echo "!b!"
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |