我把坐标存储在十六进制中,通过在线搜索,它似乎使用了有符号2的补码来处理负值.我对各种转换的位置有点迷茫,我认为路径应该是:
- 将十六进制转换为二进制.
- 将二进制转换为带符号2的补码(有效地反转带符号2的补码).
- 转换成十进制
- 除以1000000
我离这个过程还有多远?
我正在使用Snowflake,所以我可以使用SnowSQL或Java连接来获得所需的结果.我对十六进制和签名2的补码不太熟悉.
如何对十六进制值F933F177进行反向工程,以获得十进制值-114.036361?
我把坐标存储在十六进制中,通过在线搜索,它似乎使用了有符号2的补码来处理负值.我对各种转换的位置有点迷茫,我认为路径应该是:
我离这个过程还有多远?
我正在使用Snowflake,所以我可以使用SnowSQL或Java连接来获得所需的结果.我对十六进制和签名2的补码不太熟悉.
如何对十六进制值F933F177进行反向工程,以获得十进制值-114.036361?
使用内联JAVA UDF从user16320675's条注释中包装代码:
create function transform_number(num varchar)
returns double
language java
handler='Test.transform_number'
target_path='@~/Test.jar'
as
$$
class Test {
public static double transform_number(String num) {
return Integer.parseUnsignedInt(num, 16) / 1_000_000.0;
}
}
$$;
函数调用:
SELECT transform_number('F933F177') AS result;
输出: