中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 13:35
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已解决]10进制与16进制互转问题
可打印版本  1,070 / 8
第1楼 suntb 发表于 2009-10-08 17:00
高级用户 发帖 277 积分 581
[已解决]10进制与16进制互转问题
具体情况如下:
因为要写一个注册某软件的批处理,需要将序列号(纯数字)转换为对应的16进制,经过系列换算后再将新的16进制数据再转回10进制
比如:

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

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

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

这是怎么回事?

[ Last edited by suntb on 2009-10-8 at 21:22 ]
第2楼 Hanyeguxing 发表于 2009-10-08 17:48
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
因为批处理或cmd下,只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。
31个1换成十进制为2147483647,所以cmd下计算的有效值范围是 -2147483648 至 2147483647 。
你的数字大于这个数值范围,溢出了。。。。。。

[ Last edited by Hanyeguxing on 2009-10-8 at 17:56 ]
第3楼 suntb 发表于 2009-10-08 18:18
高级用户 发帖 277 积分 581
Originally posted by Hanyeguxing at 2009-10-8 17:48:
因为批处理或cmd下,只能精确到32位,这个32位是指二进制32位,其中最高位为符号位(0为正,1为负),低位31位为数值。
31个1换成十进制为2147483647, ...

谢谢 怎么解决?
第4楼 terse 发表于 2009-10-08 20:14
银牌会员 发帖 946 积分 2,404
给个10转多进制的 支持大数
你逆算一下
第5楼 suntb 发表于 2009-10-08 21:21
高级用户 发帖 277 积分 581
Originally posted by terse at 2009-10-8 20:14:
给个10转多进制的 支持大数
你逆算一下
第6楼 terse 发表于 2009-10-08 23:41
银牌会员 发帖 946 积分 2,404
自己逆算一下 应该可以了吧
第7楼 netbenton 发表于 2009-10-09 08:16
银牌会员 发帖 752 积分 1,916 来自 广西
这不是件易事哦!
关键是溢出,要分段来做加法和乘法

16制(后7位+7位前的*268435456)

建议还是用三方吧

[ Last edited by netbenton on 2009-10-9 at 06:22 ]
第8楼 terse 发表于 2009-10-09 23:14
银牌会员 发帖 946 积分 2,404
发现变量int为空 最后显示空 修正下
另把补位的去掉 直接加


[ Last edited by terse on 2009-10-10 at 23:02 ]
第9楼 suntb 发表于 2009-10-10 16:19
高级用户 发帖 277 积分 581
Originally posted by terse at 2009-10-9 23:14:
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023