当前位置: 首页 > 面试题库 >

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

龙涵蓄
2023-03-14
问题内容

我想将HTML使用的十六进制字符串转换为a 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?


问题答案:

一种简单的方法是:

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

必须使用0填充左侧,因为始终将最左侧的位解释为符号位。另外请记住,带bigint签名的postgres没有内置的无符号类型。



 类似资料:
  • 问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在:

  • 我有十六进制字符串,例如“0x103E”,我想将其转换为整数。意思是to我尝试了但它给出了数字格式异常。我如何实现这一点?

  • 问题内容: 我编写了一个简单的程序,用于在Java中向串行端口发送和接收数据。我通过回送测试(Rx到Tx)连接串行端口设备。它工作正常。但我无法发送和接收十六进制数据到串行端口和接收串行端口。在我的设备中使用了FT232BL芯片,因此是否需要任何dll或其他库来将十六进制数据发送和接收到串行端口设备。我的代码如下。 问题答案: 十六进制: 十六进制为:

  • 我有一个像“示例”这样的字符串。我想得到十六进制格式的字符串;像这样: 请给出C#语法。

  • 问题内容: 我试图在Java中将类似“ testing123”的字符串转换为十六进制形式。我目前正在使用BlueJ。 并将其转换回去,除了向后转换,是否一样? 问题答案: 这是将其转换为十六进制的简短方法:

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示: