我正在学习莫扎特,我有一个问题,没有人知道如何在没有手动-数学表转换的情况下将整数转换成十六进制。是否有任何包含的功能/模块可用于此?我知道如何换一种方式:
{String.toInt "0x2d7"} %% Hex to Int
{String.toInt "052"} %% Octal to Int
{String.toInt "0b101010"} %% Binary to Int提前谢谢你。
发布于 2022-08-04 03:15:09
我不认为该语言有任何像函数或模块从十进制转换为十六进制。不管怎样,这是一个可能的解决方案。它可能不是非常有效或优雅,但您可以看到一些基本的想法,语言处理。
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。我希望这些都对您有用。
https://stackoverflow.com/questions/73081826
复制相似问题