【问题标题】:Mozart Programming: Integer to Hexadecimal conversion in OZ莫扎特编程:OZ 中的整数到十六进制转换
【发布时间】:2022-08-04 11:15:09
【问题描述】:

我正在学习莫扎特,我有一个问题,有没有人知道如何在没有手动数学表转换的情况下将整数转换为十六进制。是否有任何包含的功能/模块可以做到这一点?我知道如何转换另一种方式:

 {String.toInt \"0x2d7\"} %% Hex to Int
 {String.toInt \"052\"}   %% Octal to Int
 {String.toInt \"0b101010\"} %% Binary to Int

先感谢您。

    标签: type-conversion oz mozart


    【解决方案1】:

    我认为该语言没有任何类似函数或模块可以从十进制转换为十六进制。无论如何,这是一个可能的解决方案。它可能不是很高效或优雅,但您可以看到该语言处理的一些基本思想。

    declare
        proc {DecConv X F ?R} % X:integer; F: b:binary, o:octal, or x:hexa; R:Result.
            fun {DivList N F}
                if N =< 0 then nil
                else N mod F|{DivList (N div F) F}
            end
        end Rs in
        if {Int.is X} then
            case F
            of b then Dl={List.reverse {DivList X 2}} in
                Rs={Append "0b" {FoldR Dl fun {$ X Xr}
                                              if X==0 then 48|Xr else 49|Xr end
                                          end nil}}
            [] o then Dl={List.reverse {DivList X 8}} in
                Rs={Append "0" {FoldR Dl fun {$ X Xr} {Int.toString X}.1|Xr end nil}}
            [] x then Dl={List.reverse {DivList X 16}} in
                Rs={Append "0x" {FoldR Dl fun {$ X Xr}
                                              if X==10 then &A|Xr
                                              elseif X==11 then &B|Xr
                                              elseif X==12 then &C|Xr
                                              elseif X==13 then &D|Xr
                                              elseif X==14 then &E|Xr
                                              elseif X==15 then &F|Xr
                                              else {Int.toString X}.1|Xr
                                              end
                                          end nil}}
            else raise error_Enter_Format(F) end
            end
        else raise error_Should_be_Int(X) end
        end
        R={String.toAtom Rs}
    end
    

    尝试在Mozart 中运行此代码,方法是选择它,然后按住 Ctrl 键,然后按点键,然后按 R 键(输入区域)。在此之后,您可以使用Ctrl . Ctrl L 提供任何下一行(到馈线):

    {Browse {DecConv 123 b}} %% '0b1111011'
    {Browse {DecConv 123 o}} %% '0173'
    {Browse {DecConv 123 x}} %% '0x7B'
    

    如您所见,答案是原子。您还可以使用函数{Atom.toString +A ?S} 将原子A 转换为字符串S。我希望这对您有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-16
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      相关资源
      最近更新 更多