在Postgres中将十六进制字符串转换为bigint [重复]

Posted

技术标签:

【中文标题】在Postgres中将十六进制字符串转换为bigint [重复]【英文标题】:Convert hex string to bigint in Postgres [duplicate] 【发布时间】:2012-09-11 18:03:18 【问题描述】:

我想将 html 使用的十六进制字符串转换为 bigint,然后通过用 PL/pgSQL 编写的函数将其转换为 Postgres 中单独的 R、G 和 B 值。

我可以像这样将字符串解码为bytea

hex bytea := decode(hex, 'hex');

在具有固定值的查询中,这就像一个美女:

select ( array[ (cast(x'ffaa33' as bigint) >> 16) % 256,
                (cast(x'ffaa33' as bigint) >> 8) % 256,
                 cast(x'ffaa33' as bigint) % 256 ] )

但我不能将两者放在一起,传递 - 例如 'ffaa33' 作为参数。

有人有更好的主意吗?我使用的是 PosgreSQL 9.1?

【问题讨论】:

【参考方案1】:

一个简单的方法是:

 select ('x'||lpad(the_hex_value,16,'0'))::bit(64)::bigint;

左边用 0 填充是必要的,因为最左边的位总是被解释为符号位。 还要记住bigint 是有符号的,postgres 没有内置的无符号类型。

【讨论】:

感谢丹尼尔。如何将 bigint 转为十六进制? @Cherven: postgres 有一个内置的to_hex(bigint) 函数

以上是关于在Postgres中将十六进制字符串转换为bigint [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中将字符串转换为十六进制

如何在Java中将字符从字母字符转换为十六进制数字?

在 Python 3 中将字节转换为十六进制字符串的正确方法是啥?

如何在java中将十六进制字符串转换为long?

在C中将十六进制转换为字符串?

在 JavaScript 中将整数转换为十六进制字符串