查看: 5451|回复: 26

[RMXP发布] 【丧心病狂】被玩坏的RMXP之2-10的进制转换互转

[复制链接]
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-7-4 14:49:08 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
使用方法还是插脚本编辑器MAIN上面···
[pre lang="ruby" line="1"]class Numeric
  def sjz(y) # 把y(1-9)进制数转换为10进制数
    num=0
    i=1
    r=self%10
    s=self
    sn=[]
    x=0
    self_array = self.to_s.scan(/./) # 分割每一位上的数字
    for char in self_array # 获取位数
      sn[x]=char.to_i
      x+=1
    end
    until i>x
      num+=r*y**(i-1)
      s=(s-r)/10
      r=s%10
      i+=1
    end
    return num.truncate == num ? num.truncate : num
  end
  def njz(y) # 把10进制数转换为y(1-9)进制数
    num=0
    i=1
    q=0
    r=self%y
    q=(self-r)/y
    num+=r
    until q==0
      r=q%y
      q=(q-r)/y
      num+=r*10**i
      i+=1
    end
    return num.truncate == num ? num.truncate : num
  end
end[/pre]
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-7-4 14:52:21 | 显示全部楼层

【丧心病狂】被玩坏的RMXP之10转16-36的进制转换

使用方法和之前的脚本一样···但是这次的进制转换转换结果是字符···就是说用p的结果只会输出nil
[pre lang="ruby" line="1"]def snjz(y) # 把10进制数转换为16进制数(必须用print,否则会p num => nil)
    s=[]
    if self==16
      s[0]=4
      s[1]=2
    elsif self==25
      s[0]=5
      s[1]=2
    elsif self==27
      s[0]=3
      s[1]=3
    elsif self==32
      s[0]=2
      s[1]=5
    elsif self==36
      s[0]=6
      s[1]=2
    end
   
    n=[]
    m=[]
    num=""
    i=1
    q=0
    r=y%s[0]
    q=(y-r)/s[0]
    n[0]=r
    until q==0
      r=q%s[0]
      q=(q-r)/s[0]
      n=r
      i+=1
    end
    ns=n.size
    nsr=ns%s[1]
    for i in 1..s[1]-nsr
      n[ns+i-1]=0
    end
    ns=n.size
    nsr=ns/s[1]
    for i in 1..nsr
      if s[1]==2
        m[i-1]=n[1+2*(i-1)].to_s+n[2*(i-1)].to_s
      elsif s[1]==3
        m[i-1]=n[2+3*(i-1)].to_s+n[1+3*(i-1)].to_s+n[3*(i-1)].to_s
      elsif s[1]==5
        m[i-1]=n[4+5*(i-1)].to_s+n[3+5*(i-1)].to_s+n[2+5*(i-1)].to_s+
        n[1+5*(i-1)].to_s+n[5*(i-1)].to_s
      end
    end
    for i in 0...m.size
      if self==16
        m="0" if m=="00"
        m="1" if m=="01"
        m="2" if m=="02"
        m="3" if m=="03"
        m="4" if m=="10"
        m="5" if m=="11"
        m="6" if m=="12"
        m="7" if m=="13"
        m="8" if m=="20"
        m="9" if m=="21"
        m="A" if m=="22"
        m="B" if m=="23"
        m="C" if m=="30"
        m="D" if m=="31"
        m="E" if m=="32"
        m="F" if m=="33"
      elsif self==25
        m="0" if m=="00"
        m="1" if m=="01"
        m="2" if m=="02"
        m="3" if m=="03"
        m="4" if m=="04"
        m="5" if m=="10"
        m="6" if m=="11"
        m="7" if m=="12"
        m="8" if m=="13"
        m="9" if m=="14"
        m="A" if m=="20"
        m="B" if m=="21"
        m="C" if m=="22"
        m="D" if m=="23"
        m="E" if m=="24"
        m="F" if m=="30"
        m="G" if m=="31"
        m="H" if m=="32"
        m="I" if m=="33"
        m="J" if m=="34"
        m="K" if m=="40"
        m="L" if m=="41"
        m="M" if m=="42"
        m="N" if m=="43"
        m="O" if m=="44"
      elsif self==27
        m="0" if m=="000"
        m="1" if m=="001"
        m="2" if m=="002"
        m="3" if m=="010"
        m="4" if m=="011"
        m="5" if m=="012"
        m="6" if m=="020"
        m="7" if m=="021"
        m="8" if m=="022"
        m="9" if m=="100"
        m="A" if m=="101"
        m="B" if m=="102"
        m="C" if m=="110"
        m="D" if m=="111"
        m="E" if m=="112"
        m="F" if m=="120"
        m="G" if m=="121"
        m="H" if m=="122"
        m="I" if m=="200"
        m="J" if m=="201"
        m="K" if m=="202"
        m="L" if m=="210"
        m="M" if m=="211"
        m="N" if m=="212"
        m="O" if m=="220"
        m="P" if m=="221"
        m="Q" if m=="222"
      elsif self==32
        m="0" if m=="00000"
        m="1" if m=="00001"
        m="2" if m=="00010"
        m="3" if m=="00011"
        m="4" if m=="00100"
        m="5" if m=="00101"
        m="6" if m=="00110"
        m="7" if m=="00111"
        m="8" if m=="01000"
        m="9" if m=="01001"
        m="A" if m=="01010"
        m="B" if m=="01011"
        m="C" if m=="01100"
        m="D" if m=="01101"
        m="E" if m=="01110"
        m="F" if m=="01111"
        m="G" if m=="10000"
        m="H" if m=="10001"
        m="I" if m=="10010"
        m="J" if m=="10011"
        m="K" if m=="10100"
        m="L" if m=="10101"
        m="M" if m=="10110"
        m="N" if m=="10111"
        m="O" if m=="11000"
        m="P" if m=="11001"
        m="Q" if m=="11010"
        m="R" if m=="11011"
        m="S" if m=="11100"
        m="T" if m=="11101"
        m="U" if m=="11110"
        m="V" if m=="11111"
      elsif self==36
        m="0" if m=="00"
        m="1" if m=="01"
        m="2" if m=="02"
        m="3" if m=="03"
        m="4" if m=="04"
        m="5" if m=="05"
        m="6" if m=="10"
        m="7" if m=="11"
        m="8" if m=="12"
        m="9" if m=="13"
        m="A" if m=="14"
        m="B" if m=="15"
        m="C" if m=="20"
        m="D" if m=="21"
        m="E" if m=="22"
        m="F" if m=="23"
        m="G" if m=="24"
        m="H" if m=="25"
        m="I" if m=="30"
        m="J" if m=="31"
        m="K" if m=="32"
        m="L" if m=="33"
        m="M" if m=="34"
        m="N" if m=="35"
        m="O" if m=="40"
        m="P" if m=="41"
        m="Q" if m=="42"
        m="R" if m=="43"
        m="S" if m=="44"
        m="T" if m=="45"
        m="U" if m=="50"
        m="V" if m=="51"
        m="W" if m=="52"
        m="X" if m=="53"
        m="Y" if m=="54"
        m="Z" if m=="55"
      end
    end
    for i in 0..m.size
      if m[m.size-i]==m[m.size-1]
        if m[m.size-i]!="0"
          num=num.to_s+m[m.size-i].to_s
        end
      else
        num=num.to_s+m[m.size-i].to_s
      end
    end
    return num.to_s == num ? num.to_s : num
  end[/pre]
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-7-4 14:53:46 | 显示全部楼层

【丧心病狂】被玩坏的RMXP之16-36位进制转10进制

需要把字符放进数组(如["A2"])才能得到结果~
[pre lang="ruby" line="1"]def nsjz(y) # 把16/25/27/32/36进制数转换为10进制数
    num=0
    sn=[]
    x=0
    n=self.to_i
    s=y.to_s
    self_array = y.to_s.scan(/./) # 分割每一位上的数字
    for char in self_array # 获取位数
      sn[x]=char.to_s
      if n==16
        sn[x]="00" if sn[x]=="0"
        sn[x]="01" if sn[x]=="1"
        sn[x]="02" if sn[x]=="2"
        sn[x]="03" if sn[x]=="3"
        sn[x]="10" if sn[x]=="4"
        sn[x]="11" if sn[x]=="5"
        sn[x]="12" if sn[x]=="6"
        sn[x]="13" if sn[x]=="7"
        sn[x]="20" if sn[x]=="8"
        sn[x]="21" if sn[x]=="9"
        sn[x]="22" if sn[x]=="A"
        sn[x]="23" if sn[x]=="B"
        sn[x]="30" if sn[x]=="C"
        sn[x]="31" if sn[x]=="D"
        sn[x]="32" if sn[x]=="E"
        sn[x]="33" if sn[x]=="F"
      elsif n==25
        sn[x]="00" if sn[x]=="0"
        sn[x]="01" if sn[x]=="1"
        sn[x]="02" if sn[x]=="2"
        sn[x]="03" if sn[x]=="3"
        sn[x]="04" if sn[x]=="4"
        sn[x]="10" if sn[x]=="5"
        sn[x]="11" if sn[x]=="6"
        sn[x]="12" if sn[x]=="7"
        sn[x]="13" if sn[x]=="8"
        sn[x]="14" if sn[x]=="9"
        sn[x]="20" if sn[x]=="A"
        sn[x]="21" if sn[x]=="B"
        sn[x]="22" if sn[x]=="C"
        sn[x]="23" if sn[x]=="D"
        sn[x]="24" if sn[x]=="E"
        sn[x]="30" if sn[x]=="F"
        sn[x]="31" if sn[x]=="G"
        sn[x]="32" if sn[x]=="H"
        sn[x]="33" if sn[x]=="I"
        sn[x]="34" if sn[x]=="J"
        sn[x]="40" if sn[x]=="K"
        sn[x]="41" if sn[x]=="L"
        sn[x]="42" if sn[x]=="M"
        sn[x]="43" if sn[x]=="N"
        sn[x]="44" if sn[x]=="O"
      elsif n==27
        sn[x]="000" if sn[x]=="0"
        sn[x]="001" if sn[x]=="1"
        sn[x]="002" if sn[x]=="2"
        sn[x]="010" if sn[x]=="3"
        sn[x]="011" if sn[x]=="4"
        sn[x]="012" if sn[x]=="5"
        sn[x]="020" if sn[x]=="6"
        sn[x]="021" if sn[x]=="7"
        sn[x]="022" if sn[x]=="8"
        sn[x]="100" if sn[x]=="9"
        sn[x]="101" if sn[x]=="A"
        sn[x]="102" if sn[x]=="B"
        sn[x]="110" if sn[x]=="C"
        sn[x]="111" if sn[x]=="D"
        sn[x]="112" if sn[x]=="E"
        sn[x]="120" if sn[x]=="F"
        sn[x]="121" if sn[x]=="G"
        sn[x]="122" if sn[x]=="H"
        sn[x]="200" if sn[x]=="I"
        sn[x]="201" if sn[x]=="J"
        sn[x]="202" if sn[x]=="K"
        sn[x]="210" if sn[x]=="L"
        sn[x]="211" if sn[x]=="M"
        sn[x]="212" if sn[x]=="N"
        sn[x]="220" if sn[x]=="O"
        sn[x]="221" if sn[x]=="P"
        sn[x]="222" if sn[x]=="Q"
      elsif n==32
        sn[x]="00000" if sn[x]=="0"
        sn[x]="00001" if sn[x]=="1"
        sn[x]="00010" if sn[x]=="2"
        sn[x]="00011" if sn[x]=="3"
        sn[x]="00100" if sn[x]=="4"
        sn[x]="00101" if sn[x]=="5"
        sn[x]="00110" if sn[x]=="6"
        sn[x]="00111" if sn[x]=="7"
        sn[x]="01000" if sn[x]=="8"
        sn[x]="01001" if sn[x]=="9"
        sn[x]="01010" if sn[x]=="A"
        sn[x]="01011" if sn[x]=="B"
        sn[x]="01100" if sn[x]=="C"
        sn[x]="01101" if sn[x]=="D"
        sn[x]="01110" if sn[x]=="E"
        sn[x]="01111" if sn[x]=="F"
        sn[x]="10000" if sn[x]=="G"
        sn[x]="10001" if sn[x]=="H"
        sn[x]="10010" if sn[x]=="I"
        sn[x]="10011" if sn[x]=="J"
        sn[x]="10100" if sn[x]=="K"
        sn[x]="10101" if sn[x]=="L"
        sn[x]="10110" if sn[x]=="M"
        sn[x]="10111" if sn[x]=="N"
        sn[x]="11000" if sn[x]=="O"
        sn[x]="11001" if sn[x]=="P"
        sn[x]="11010" if sn[x]=="Q"
        sn[x]="11011" if sn[x]=="R"
        sn[x]="11100" if sn[x]=="S"
        sn[x]="11101" if sn[x]=="T"
        sn[x]="11110" if sn[x]=="U"
        sn[x]="11111" if sn[x]=="V"
      elsif n==36
        sn[x]="00" if sn[x]=="0"
        sn[x]="01" if sn[x]=="1"
        sn[x]="02" if sn[x]=="2"
        sn[x]="03" if sn[x]=="3"
        sn[x]="04" if sn[x]=="4"
        sn[x]="05" if sn[x]=="5"
        sn[x]="10" if sn[x]=="6"
        sn[x]="11" if sn[x]=="7"
        sn[x]="12" if sn[x]=="8"
        sn[x]="13" if sn[x]=="9"
        sn[x]="14" if sn[x]=="A"
        sn[x]="15" if sn[x]=="B"
        sn[x]="20" if sn[x]=="C"
        sn[x]="21" if sn[x]=="D"
        sn[x]="22" if sn[x]=="E"
        sn[x]="23" if sn[x]=="F"
        sn[x]="24" if sn[x]=="G"
        sn[x]="25" if sn[x]=="H"
        sn[x]="30" if sn[x]=="I"
        sn[x]="31" if sn[x]=="J"
        sn[x]="32" if sn[x]=="K"
        sn[x]="33" if sn[x]=="L"
        sn[x]="34" if sn[x]=="M"
        sn[x]="35" if sn[x]=="N"
        sn[x]="40" if sn[x]=="O"
        sn[x]="41" if sn[x]=="P"
        sn[x]="42" if sn[x]=="Q"
        sn[x]="43" if sn[x]=="R"
        sn[x]="44" if sn[x]=="S"
        sn[x]="45" if sn[x]=="T"
        sn[x]="50" if sn[x]=="U"
        sn[x]="51" if sn[x]=="V"
        sn[x]="52" if sn[x]=="W"
        sn[x]="53" if sn[x]=="X"
        sn[x]="54" if sn[x]=="Y"
        sn[x]="55" if sn[x]=="Z"
      else
        exit
      end
      x+=1
    end
    for i in 0...sn.size
      num=num.to_s+sn.to_s
    end
    if n==16
      n=4
    elsif n==25
      n=5
    elsif n==27
      n=3
    elsif n==32
      n=2
    elsif n==36
      n=6
    end
    num=(num.to_i).sjz(n)
    return num.truncate == num ? num.truncate : num
  end[/pre]

点评

太长了···复制不方便  发表于 2014-7-4 15:39
chd大神能不能发到同一个帖子里啊= =  发表于 2014-7-4 15:04
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-4 15:18:35 | 显示全部楼层
"abcdef".to_i(16)

ruby内置的东西写那么多,真无聊
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-7-4 15:38:47 | 显示全部楼层
taroxd 发表于 2014-7-4 15:18
"abcdef".to_i(16)

ruby内置的东西写那么多,真无聊

···任意进制都转了?我这个只是给纯新手用的= =
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-4 15:39:54 | 显示全部楼层
chd114 发表于 2014-7-4 15:38
···任意进制都转了?我这个只是给纯新手用的= =


从2到36皆可互转,比你的更加适合纯新手用(话说纯新手用不到这个吧
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-7-4 15:49:37 | 显示全部楼层
taroxd 发表于 2014-7-4 15:39
从2到36皆可互转,比你的更加适合纯新手用(话说纯新手用不到这个吧

36以上怎么破···表示在考虑按C的任意转弄···但你这个只能把10进制的转成其他进制吧?反过来怎么弄···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-4 15:52:04 | 显示全部楼层
chd114 发表于 2014-7-4 15:49
36以上怎么破···表示在考虑按C的任意转弄···但你这个只能把10进制的转成其他进制吧?反过来怎么弄 ...

36以上你用什么东西表示……字母都用光了……

16转10: "abcdef".to_i(16)
10转16:123456.to_s(16)
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

 楼主| 发表于 2014-7-4 15:56:31 | 显示全部楼层
taroxd 发表于 2014-7-4 15:52
36以上你用什么东西表示……字母都用光了……

16转10: "abcdef".to_i(16)

36以上的我记得我看到的那个C语言的是用文字来表示还是希腊字母来表示来着···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-7-4 15:59:10 | 显示全部楼层
chd114 发表于 2014-7-4 15:56
36以上的我记得我看到的那个C语言的是用文字来表示还是希腊字母来表示来着··· ...


这是Ruby,不是C
而且这种东西随你怎么表示,转进制什么的还有难度么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部