首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mozart编程: OZ中整数到十六进制的转换

Mozart编程: OZ中整数到十六进制的转换
EN

Stack Overflow用户
提问于 2022-07-22 14:18:08
回答 1查看 29关注 0票数 1

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

代码语言:javascript
复制
 {String.toInt "0x2d7"} %% Hex to Int
 {String.toInt "052"}   %% Octal to Int
 {String.toInt "0b101010"} %% Binary to Int

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 03:15:09

我不认为该语言有任何像函数或模块从十进制转换为十六进制。不管怎样,这是一个可能的解决方案。它可能不是非常有效或优雅,但您可以看到一些基本的想法,语言处理。

代码语言:javascript
复制
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 (要提要行)填充任何下一行:

代码语言:javascript
复制
{Browse {DecConv 123 b}} %% '0b1111011'
{Browse {DecConv 123 o}} %% '0173'
{Browse {DecConv 123 x}} %% '0x7B'

正如你所看到的,答案是原子。您也可以使用函数{Atom.toString +A ?S}将原子A转换为字符串S。我希望这些都对您有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73081826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档