将 HEX 转换为 BIGINT或其字符串表示形式- SQL Server 2019

问题描述

我正在尝试在 sql Server 2019 上将 override fun onMessageReceived(remoteMessage: RemoteMessage) { DLog("") val data = remoteMessage.data remoteMessage.notification?.let { data.set(NOTI_TITLE,it.title) data.set(NOTI_MESSAGE,it.body) //Add more data if necessary } pushNotification.show(applicationContext,data) } 值(ipv6 地址,已扩展)转换为 HEX 值。

  • 输入是:BIGINT
  • 预期输出2a0085c0000100000000000002410023

尝试了几乎所有在 SO 和其他任何地方标记为“有效”的解决方案,例如:

55830288595252163998698714105846497315

但无济于事。此输出中的先前查询结果:select convert(bigint,convert(varbinary,'2a0085c0000100000000000002410023',2))

任何帮助将不胜感激!

解决方法

bigint 太小(64 位),无法容纳 IPv6 地址(128 位)。

你可以像这样得到两半:

SELECT
    high = CAST(SUBSTRING(ipv6Val,1,8) AS bigint),low = CAST(SUBSTRING(ipv6Val,9,8) AS bigint)

假设 varbinary/binary 值实际上是 16 个字节的确切长度。


根据评论编辑

IPv6 通常表示为十六进制而不是十进制,这将得到它作为文本:

SELECT CONVERT(varchar(32),ipv6Val,2)

在 T-SQL 中转换为十进制真的很困难,就像在大多数语言中一样,我想问你为什么会需要它,因为 IPv6 从来没有这样使用过。