问题描述
我正在尝试在 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 从来没有这样使用过。