中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-05 19:28
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]*********十进制转其它进制********** 查看 1,027 回复 9
楼 主 [原创]*********十进制转其它进制********** 发表于 2007-09-18 17:18 ·  中国 北京 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
@echo off
setlocal enabledelayedexpansion
::::::::::::::::::::::::::10 to 2,8,16 {s11ss 2007-9-18}::::::::::::::::::::::::::
echo Please input a number expressed in decimalism :(Assuming that it possesses 2 bytes.)
:Rec
set /p num=
if !num! gtr 32767 (call :w)
if !num! lss -32767 (call :w)
if !num! equ 0 (echo. & echo No matter what system it is expressed in,it's always 0. & goto :eof)
set /a flag=1
if !num! lss 0 (set /a num=65536+!num! & set /a flag=-1)
echo.
echo Calculating...
if !num! gtr 0 (
for %%a in (2,8,16) do (
set /a counter=0
set /a quotient=!num!
set result=
call :n %%a
call :c %%a
call :p %%a
)
goto :eof
)
:w
echo.
echo Error.The number's value is allowed in [-32767,32767] only.Please try again.
goto :Rec
:n
set /a remainder=!quotient!%%%1
set /a quotient=!quotient!/%1
if %1 equ 16 (
call :16 10 A
call :16 11 B
call :16 12 C
call :16 13 D
call :16 14 E
call :16 15 F
)
set result=!remainder!!result!
set /a counter+=1
if !quotient! equ 0 (goto :eof) else (goto :n)
:16
if !remainder! equ %1 set remainder=%2
goto :eof
:p
if %1 equ 2 (
set newrslt=!result:~0,4!
for /l %%a in (4,4,16) do (
set newrslt=!newrslt! !result:~%%a,4!
)
set t=1.Binary:
set result=!newrslt!
echo.
echo The result is :
)
if %1 equ 8 (set t=2.Octal:)
if %1 equ 16 (set t=3.Hex:)
echo.
echo !t!
echo !result!
goto :eof
:c
if %1 equ 2 (set a=16& set b=0& set c=1)
if %1 equ 8 (set a=6& set b=0& set c=1)
if %1 equ 16 (set a=4& set b=0& set c=F)
if not !counter! equ !a! (
set /a cnum=!a!-!counter!
if !flag! equ 1 (set cch=!b!) else (set cch=!c!)
for /l %%a in (1,1,!cnum!) do (set result=!cch!!result!)
)
goto :eof
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
ccwan +6 2007-09-18 17:33
wudixin96 +5 2007-09-18 17:53
2 发表于 2007-09-18 17:52 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
呵呵,楼主真有意思,每天一原创。

加分加分
3 发表于 2007-09-18 20:15 ·  中国 甘肃 甘南藏族自治州 合作市 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
10 to 16 可以试试 ping
4 发表于 2007-09-18 23:24 ·  中国 北京 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
Originally posted by vkill at 2007-9-18 08:15 PM:
10 to 16 可以试试 ping




ping ?延时?
5 发表于 2007-09-19 00:15 ·  中国 湖北 武汉 中国科学院武汉分院
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
这个好似我以前写过一个任意进制的
呵呵...

鼓励原创.......加油啊!!
6 发表于 2007-09-19 21:02 ·  中国 甘肃 甘南藏族自治州 合作市 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
Originally posted by s11ss at 2007-9-18 23:24:




ping ?延时?

for 来处理ping的回显
7 发表于 2007-09-19 23:11 ·  中国 北京 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
Originally posted by vkill at 2007-9-19 09:02 PM:

for 来处理ping的回显


请问与进制转换有关系么?
8 发表于 2007-09-19 23:59 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Originally posted by s11ss at 2007-9-19 23:11:


请问与进制转换有关系么?
可以用ping命令简单实现10到16进制的转换,论坛以前有过讨论,搜索一下先?
9 发表于 2007-09-20 00:38 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
这是收藏的一段进制转换器,原来是html的,我把它改为HTA了
<HTML>
<HEAD>
<TITLE>进制转换器 v1.0</TITLE>

<HTA:APPLICATION
ID="MyhyliApp"
APPLICATIONNAME="进制转换器 v1.0"
VERSION="1.0"
SCROLL="no"
INNERBORDER="no"
CONTEXTMENU="no"
CAPTION="yes"
SHOWINTASKBAR="yes"
SINGLEINSTANCE="yes"
SYSMENU="yes"
WINDOWSTATE="normal"
NAVIGABLE="yes"
/>

<SCRIPT language="JavaScript">

window.resizeTo(350, 270);
ileft=(window.screen.width-350)/2;
itop=(window.screen.height-270)/2;
window.moveTo(ileft,itop);

function convert()
{
var num;
var idx = option1.selectedIndex;
if (idx == 0)
num = parseInt(input1.value, 10);
if (idx == 1)
num = parseInt(input1.value, 2);
if (idx == 2)
num = parseInt(input1.value, 8);
if (idx == 3)
num = parseInt(input1.value, 16);

var dec = " 十进制:" + num.toString(10);
var bin = " 二进制:" + num.toString(2);
var oct = " 八进制:" + num.toString(8);
var hex = "十六进制:" + num.toString(16).toUpperCase();

edit1.innerText = dec + "\n" + bin + "\n" + oct + "\n" + hex;
input1.select();
}
</SCRIPT>
</HEAD>

<BODY scroll="no" style="border: 1 solid #9ab8f6;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#10bfff,endColorStr=#007db2);cursor:hand;color:#ffffff;">
<SELECT NAME="option1" SIZE="1">
<OPTION>十进制<OPTION>二进制<OPTION>八进制<OPTION>十六进制
</SELECT>
<INPUT name="input1">
<BUTTON onclick="convert()" type="submit" style="border: 1 solid #9ab8f6;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#10bfff,endColorStr=#007db2);cursor:hand;color:#ffffff;">转换</BUTTON><BR><BR>
转换结果:<BR>
<span id="edit1" style="width:300; height:100"> 十进制:<BR>
 二进制:<BR>
 八进制:<BR>
十六进制:
</span>
</BODY>
</HTML>
10 发表于 2007-09-20 15:26 ·  中国 北京 鹏博士BGP
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
Originally posted by lxmxn at 2007-9-19 11:59 PM:
可以用ping命令简单实现10到16进制的转换,论坛以前有过讨论,搜索一下先?



又长见识了,呵呵~~
论坛跳转: