负数的bitstring怎么转换回负数数值?

如题,我现在需要将一个负数转换为bitstring然后对其做一定处理,之后再转换成一个新的数值。
但将负数补码的字符串使用parse函数转换时必定会报错,就像这样:

julia> parse(Int, bitstring(Int(-10)), base=2)
ERROR: OverflowError: overflow parsing "111111111111111111111111111111111111111111111111111111111111
0110"
Stacktrace:
 [1] tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at .\parse.jl:160

 [2] parse(::Type{Int64}, ::String; base::Int64) at .\parse.jl:238
 [3] top-level scope at REPL[22]:1

请问我应该如何达到我的目的呢

试试 BigInt

julia> parse(BigInt, bitstring(Int(-10)))
1111111111111111111111111111111111111111111111111111111111110110

我上面的写法可能有点问题,需要再转换成十进制的数,得加base=2,像下面这样:

julia> parse(Int, bitstring(Int(-10)), base=2)
ERROR: OverflowError: overflow parsing "111111111111111111111111111111111111111111111111111111111111
0110"
Stacktrace:
 [1] tryparse_internal(::Type{Int64}, ::String, ::Int64, ::Int64, ::Int64, ::Bool) at .\parse.jl:160

 [2] parse(::Type{Int64}, ::String; base::Int64) at .\parse.jl:238
 [3] top-level scope at REPL[22]:1

如果使用BigInt,转换回来的是一个奇怪的数,不是原本的数了,像下面这样:

julia> parse(BigInt, bitstring(Int(-10)), base=2)
18446744073709551606

那试一下这个

julia> reinterpret(Int,parse(UInt, bitstring(Int(-10)), base=2))
-10
1 个赞

可以!感激不尽

julia> reinterpret(Int,parse(UInt, bitstring(Int(-10)), base=2))
-10