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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值