传统的 4 位十六进制非常直接。
十六进制字符串到整数(假设值存储在名为 FHexString 的字段中):
CONVERT(BIGINT,CONVERT(varbinary(4),
(SELECT master.dbo.fn_cdc_hexstrtobin(
LEFT(FMEID_ESN,8)
))
))
整数到十六进制字符串(假设值存储在名为 FInteger 的字段中):
(SELECT master.dbo.fn_varbintohexstr(CONVERT(varbinary,CONVERT(int,
FInteger
))))
需要注意的重要一点是,当您开始使用导致寄存器共享的位大小时,尤其是在英特尔机器上,由于英特尔的小端特性,您在寄存器中的高、低、左和右将被交换。例如,当使用 varbinary(3) 时,我们谈论的是 6 个字符的 Hex。在这种情况下,您的位从右到左配对为以下索引“54,32,10”。在英特尔系统中,您会期望“76,54,32,10”。由于您只使用了 8 个中的 6 个,因此您需要记住自己进行交换。 “76,54”将符合您的左侧,“32,10”将符合您的右侧。逗号分隔你的高和低。英特尔交换了高点和低点,然后是左右交换。所以要进行转换...叹息,您必须自己交换它们,例如,以下转换 8 个字符十六进制的前 6 个:
(SELECT master.dbo.fn_replvarbintoint(
CONVERT(varbinary(3),(SELECT master.dbo.fn_cdc_hexstrtobin(
--intel processors, registers are switched, so reverse them
----second half
RIGHT(FHex8,2)+ --0,1 (0 indexed)
LEFT(RIGHT(FHex8,4),2)+ -- 2,3 (oindex)
--first half
LEFT(RIGHT(FHex8,6),2) --4,5
)))
))
这有点复杂,所以我会尽量保持我的转换为 8 个字符的十六进制 (varbinary(4))。
总之,这应该可以回答您的问题。全面。