【发布时间】:2018-03-18 17:28:40
【问题描述】:
我正在尝试将十六进制字符串转换为 IPV6 地址的 NUMERIC 列
十六进制输入为2001:200:101:ffff:ffff:ffff:ffff:ffff
我的输出应该是42540528727106952925351778646877011967
我通过将我的输入消除: 作为2001200101ffffffffffffffffffff 来尝试了从该站点获取的以下函数
`CREATE OR REPLACE FUNCTION hex_to_int(hexval varchar) RETURNS numeric AS $$
DECLARE
result NUMERIC;
i integer;
len integer;
hexchar varchar;
BEGIN
result := 0;
len := length(hexval);
for i in 1..len loop
hexchar := substr(hexval, len - i + 1, 1);
result := result + 16 ^ (i - 1) * case
when hexchar between '0' and '9' then cast (hexchar as int)
when upper (hexchar) between 'A' and 'F' then ascii(upper(hexchar)) - 55
end;
end loop;
RETURN result;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;`
我得到十进制数
select hex_to_int('2001200101ffffffffffffffffffff');
hex_to_int
--------------------------------------
166176317495821453702777150266933247
如何得到我的实际十进制数?
【问题讨论】:
-
您能否详细说明您的问题?我在这里尝试了这个函数,它为给定的十六进制值提供了正确的十进制数。
-
你有
166176317495821453702777150266933247作为十进制数,如果你将0x2001200101ffffffffffffffffffff转换为十进制,你实际上得到166176317495821453702777150266933247,所以我看不出问题。 -
感谢您的回复,我的十六进制输入是
2001:200:101:ffff:ffff:ffff:ffff:ffff我需要转换为十进制为42540528727106952925351778646877011967 -
你必须描述你是如何得出这个结果的。
标签: postgresql hex decimal ipv6