中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]*********十进制转其它进制**********
作者:
标题: [原创]*********十进制转其它进制********** 上一主题 | 下一主题
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『楼 主』:  [原创]*********十进制转其它进制**********

@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

   此帖被 +11 点积分      点击查看详情   
评分人:【 ccwan 分数: +6  时间:2007-9-18 17:33
评分人:【 wudixin96 分数: +5  时间:2007-9-18 17:53


2007-9-18 17:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 2 楼』:  

呵呵,楼主真有意思,每天一原创。

加分加分

2007-9-18 17:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

10 to 16 可以试试 ping

2007-9-18 20:15
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by vkill at 2007-9-18 08:15 PM:
10 to 16 可以试试 ping

ping ?延时?

2007-9-18 23:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 5 楼』:  

这个好似我以前写过一个任意进制的
呵呵...

鼓励原创.......加油啊!!

2007-9-19 00:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by s11ss at 2007-9-18 23:24:




ping ?延时?

for 来处理ping的回显

2007-9-19 21:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by vkill at 2007-9-19 09:02 PM:

for 来处理ping的回显

请问与进制转换有关系么?

2007-9-19 23:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by s11ss at 2007-9-19 23:11:


请问与进制转换有关系么?

可以用ping命令简单实现10到16进制的转换,论坛以前有过讨论,搜索一下先?

2007-9-19 23:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  

这是收藏的一段进制转换器,原来是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>




2007-9-20 00:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by lxmxn at 2007-9-19 11:59 PM:
可以用ping命令简单实现10到16进制的转换,论坛以前有过讨论,搜索一下先?

又长见识了,呵呵~~

2007-9-20 15:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: