Традиційний 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
))))
Важливо зазначити, що коли ви починаєте використовувати бітові розміри, які спричиняють спільний доступ до регістрів, особливо на машині Intel, ваші високі та низькі та ліві та права в регістрах будуть помінені місцями через незначну природу Intel. Наприклад, коли використовується varbinary (3), ми говоримо про 6-символьну шістнадцяткову форму. У цьому випадку ваші біти поєднуються як такі індекси справа наліво "54,32,10". В системі Intel ви очікували б "76,54,32,10". Оскільки ви використовуєте лише 6 з 8, вам слід пам’ятати, що робити заміни потрібно самостійно. "76,54" вважатиметься вашим лівим, а "32,10" - вашим правим. Кома розділяє ваш високий і низький. Intel міняє місцями максимуми і мінімуми, потім ліворуч і праворуч. Отже, щоб зробити перетворення ... зітхайте, ви повинні поміняти їх місцями, наприклад,
(SELECT master.dbo.fn_replvarbintoint(
CONVERT(varbinary(3),(SELECT master.dbo.fn_cdc_hexstrtobin(
RIGHT(FHex8,2)+
LEFT(RIGHT(FHex8,4),2)+
LEFT(RIGHT(FHex8,6),2)
)))
))
Це дещо складно, тому я намагався б зберегти свої перетворення в 8 символьних шістнадцяткових символів (varbinary (4)).
Таким чином, це має відповісти на ваше запитання. Всебічно.