[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理实现10进制大数转16进制

具体情况如下:
因为要写一个注册某软件的批处理,需要将序列号(纯数字)转换为对应的16进制,经过系列换算后再将新的16进制数据再转回10进制
比如:

2319692668
转换成16进制后应该是
8a43b37c

反过来16进制的
8a43b37c
转换成10进制应该是
2319692668

但是我在CMD中用set /a 0x8a43b37c得到的结果却是
-1975274628

这是怎么回事?

[ 本帖最后由 SunTB 于 2009-10-8 21:11 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 1楼 的帖子

请使用关键字“进制”搜索,搜索范围为“搜索所有开放的版块”。
(*^_^*)

TOP

在发帖前已搜索并查看相关的帖子,也下载了一些其中的代码测试,仍未找到问题所在

用网页版的转换工具结果如下
[attach]1908[/attach]

TOP

在cmd里,大于0x80000000的数为负数,所以要再转会来可不是件容易的事哦!

TOP

原帖由 netbenton 于 2009-10-8 17:29 发表
在cmd里,大于0x80000000的数为负数,所以要再转会来可不是件容易的事哦!

原来是这样 有办法解决吗?

TOP

高精度...要不你就把它分成两个数把我可以做个第三方来解决...wait a minute

[ 本帖最后由 Seter 于 2009-10-8 18:21 编辑 ]

TOP

从CN-DOS的terse处得到一代码(如下)

经测试10进制转16进制没问题了

至于16进制转10进制我自己再琢磨一下

如果大家有好用的代码也可以贴上来帮忙下

  1. @echo off&setlocal enabledelayedexpansion
  2. set/p s=请输入十进制数:
  3. set/p x=请输入转换进制:
  4. set "str=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_@"
  5. :lp
  6. set /a "n=8189,m=0,r=0"
  7. for /l %%a in (1,1,14) do (
  8.      set /a "u=(n+m)/2"
  9.      for %%i in (!u!) do if "!s:~%%i!" equ "" (set /a n=u) else set /a m=u
  10. )
  11. for /l %%i in (0,1,%u%) do (
  12.    set/a "n=!s:~%%i,1!+(r*10),r=n%%x,n/=x"
  13.    set v=!v!!n!
  14. )
  15.    set b=!str:~%r%,1!!b!
  16.    for /f "tokens=* delims=0" %%i in ("0!v!") do set "s=%%i"
  17.    if defined s set v=&goto lp
  18.    echo "!b!"
  19. pause
复制代码

TOP

返回列表