sql-server - SQL:按位运算
问题描述
诚然,我对按位和十六进制等有点无知。这不是我必须处理的事情。所以我正在查看的是0401
我的数据库中的一个值。我知道我可以0x0401
很容易地连接和获得,但我需要能够将其转换为二进制形式:0000 0001 0000 0100
尽管我很难找到任何可以满足我需要的示例。
解决方案
这是您可能可以使用的东西-它将整数转换为等效的二进制,只需先将您的字符串转换为 int-或者如果它是十六进制,您可以使用convert
. 如果您希望以 4 个等为一组,可以在适当的地方添加空格。您可以创建一个函数以使用内联:
declare @num binary(4) = 0x0401 -- little endian
select @num= Convert(int,Cast(reverse(@num) as binary(4)))
select
iif(Convert(varchar(16), @num & 32768 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 16384 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 8192 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 4096 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 2048 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 1024 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 512 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 256 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 128 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 64 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 32 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 16 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 8 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 4 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 2 ) > 0,'1','0') +
iif(Convert(varchar(16), @num & 1 ) > 0,'1','0')
编辑 - 像这样转换小端字节顺序:
declare @little binary(4) = 0x0401
select Cast(reverse(@little) as binary(4)) bigEndian
推荐阅读
- machine-learning - 将参数发送到 Keras Tuner 模型构建器函数
- python - 使用 .get() 处理不存在的嵌套键
- video - 通过 WebRTC 分辨率更改问题的 HTML5 视频和 MediaStreamTrack 流
- python - 如何与 matplotlib 同步绘图?
- swift - 启用应用程序组时使用`defaults` CLI:“域不存在”
- c# - .net core 3.卸载程序集
- image - 图像顶部带有文本的堆栈列表
- c - 在 c 中填充具有以下结构的矩阵
- c# - 当前上下文中不存在名称 Request
- python - Pandas GroupBy 和 Sum python