关闭

将int型转为指定长度的二进制

标签: divgofunctionnull
560人阅读 评论(0) 收藏 举报
分类:

 

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE FUNCTION Dec2Bin(@Dec INT@StrLen TINYINT)
RETURNS VARCHAR(31-- INT型,4字节,正数转为二进制字符串最多31位
AS
BEGIN
    
DECLARE @BinStr AS VARCHAR(31)      -- 二进制表示的字符串
    DECLARE @Div2 AS INT                -- 商
    DECLARE @Mod2 AS INT                -- 模/余数
    IF @Dec < 0
        
RETURN 'NULL'              -- 不支持负数的转换
    SET @Div2 = @Dec / 2  
    
SET @Mod2 = @Dec % 2  
    
SET @BinStr = ''
    
WHILE @Div2 <> 0
    
BEGIN
        
SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr
        
SET @Dec = @Dec / 2
        
SET @Div2 = @Dec / 2
        
SET @Mod2 = @Dec % 2
    
END
    
    
SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr -- 至此,已完成十进制到二进制的转换
    IF @StrLen > LEN(@BinStr)    -- 如果用户指定的长度大于实际长度,则需要左边补0
        BEGIN
            
IF @StrLen > 31    -- 返回的长度,最长为32
                SET @StrLen = 31
    
            
DECLARE @ZeroStr VARCHAR(31)    -- 需要补充的"0000..."
            DECLARE @OffsetLen TINYINT       -- 需要补充几个"0"
            SET @ZeroStr = ''
            
SET @OffsetLen = @StrLen - LEN(@BinStr)
    
            
WHILE  @OffsetLen > 0
            
BEGIN
                
SET @ZeroStr = @ZeroStr + '0' 
                
SET @OffsetLen = @OffsetLen - 1
            
END
    
            
SET @BinStr = @ZeroStr + @BinStr
        
END
    
RETURN @BinStr
END


GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:50366次
    • 积分:722
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:45篇
    • 译文:0篇
    • 评论:3条
    最新评论
    加密解密