6

如何将整数转换为十六进制字符串?我想将 int 转换为可以在页面上用作颜色的格式,例如“#ff0000”。

例如:

--This converts my int to hex:
CONVERT(VARBINARY(8), Color) Color,

我想做这样的事情:

'#' + CONVERT(NVARCHAR(10), CONVERT(VARBINARY(8), Color)) Color

但是转换 varbinary 字符串只是将其转换为 ascii 字符,而不是返回实际的十六进制字符串

4

2 回答 2

9

有一个内置函数可以从二进制值生成十六进制字符串

SELECT
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 0)),
    '#' + sys.fn_varbintohexstr(CONVERT(BINARY(3), 255))

您需要binary(3)确保输出字符串的长度正确,
这是错误的。你得到 4 个十六进制数字,因为这里的 0 和 255 是 4 个字节int

SELECT
    '#' + sys.fn_varbintohexstr(CONVERT(varBINARY(8), 0)),
    '#' + sys.fn_varbintohexstr(CONVERT(varBINARY(8), 255))

2017 年 10 月更新:

转换现在内置在 SQL Server 中(自 2008 年以来!!),因此我们可以简单地使用 CONVERT

SELECT '#' + CONVERT(char(6), CONVERT(BINARY(3), 2570841), 2)
于 2013-06-21T13:48:58.310 回答
2

从 int 到 varbinary 的转换在 SQL SERVER 中是隐式的,因此您也可以使用 SELECT sys.fn_varbintohexstr(1234567) 并完成。

但要注意 BIGINT 值,因为长数字文字被解释为 DECIMAL 值而不是 BIGINT。小数有前缀数据来保存精度,并且字节顺序是相反的,这就是你得到这个的原因:

select sys.fn_varbintohexstr(2147483648)

返回 0x0A00000100000080

您需要显式转换为 BIGINT:

select select sys.fn_varbintohexstr(CONVERT(BIGINT(2147483648))

返回 0x0000000080000000

于 2014-11-28T16:54:26.043 回答