Традиционный 4-битный гекс довольно прямой.
Hex String to Integer (Предполагается, что значение хранится в поле с именем 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
))))
Важно отметить, что, когда вы начнете использовать битовые размеры, которые вызывают совместное использование регистров, особенно на компьютере Intel, ваши Высокие и Низкие и Левые и Права в регистрах будут поменяться местами из-за порядкового номера Intel. Например, при использовании varbinary (3) мы говорим о шестнадцатеричном Hex. В этом случае ваши биты соединяются в виде следующих индексов справа налево "54,32,10". В системе Intel вы ожидаете «76,54,32,10». Поскольку вы используете только 6 из 8, вы должны помнить, чтобы сделать обмены самостоятельно. «76,54» будет считаться вашим левым, а «32,10» - вашим правом. Запятая разделяет ваш максимум и минимум. Intel меняет взлеты и падения, затем налево и направо. Итак, чтобы сделать преобразование ... вздох, вы должны поменять их сами, например, следующее преобразует первые 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
)))
))
Это немного сложно, поэтому я постараюсь сохранить свои преобразования в шестнадцатеричных гексах (varbinary (4)).
В целом, это должно ответить на ваш вопрос. Обширное.