10进制整数转化成36进制字符串:
#include "stdafx.h"
#include<stdio.h>int main()
{
int num, base, i;
int a[32];
scanf("%d %d", &num, &base);
if(num == 0){printf("0\n"); return 0;}
for(i = 0; num; i++){
a[i] = num % base;
num /= base;
}
for(i--; i >= 0; i--)
printf("%c", (a[i] < 10) ? (a[i] + '0') : (a[i] - 10 + 'A'));
printf("\n");
return 0;
}
--参数描述:@Hex10 被转换10进制数字
--测试方法:SELECT [dbo].[ConvertHex10To36](17122394)
CREATE FUNCTION [dbo].[ConvertHex10To36]
(@Hex10 INT)
RETURNS VARCHAR(100)
AS
--DECLARE @Hex10 INT SET @Hex10=17122394 --注释AS(包括AS)以上所有行,将代码最后的RETURN换成PRINT,并设该行为断点,按F11开始调试
BEGIN
DECLARE @StrHex36 VARCHAR(100)--返回36进制表示的结果
DECLARE @Remainder INT--余数
DECLARE @Base36 VARCHAR(1)
SET @Remainder=0
SET @StrHex36=''
WHILE @Hex10>0
BEGIN
SET @Remainder=@Hex10%36
SET @Hex10=@Hex10/36
SET @Base36=SUBSTRING('0123456789ABCDEFGHIJKLNMOPQRSTUVWXYZ',@Remainder+1,1)
SET @StrHex36=@Base36+@StrHex36
END
--PRINT @StrHex36
RETURN @StrHex36
END
--测试方法:SELECT dbo.ConvertHex36To10('A6ZQ2')
CREATE FUNCTION dbo.ConvertHex36To10
(@StrHex36 VARCHAR(100))
RETURNS INT
AS
BEGIN
DECLARE @StrHex36Len INT --被转换36进制字串的长度
DECLARE @Base36To10 INT --每位36进制基数对应的10进制数据大小
DECLARE @Index INT --字符串索引
DECLARE @Hex10 INT --被返回10进制数据
DECLARE @Base36 VARCHAR(1)--36进制基数
SET @Hex10=0
SET @StrHex36Len=LEN(@StrHex36)
SET @Index=1
WHILE @Index<=@StrHex36Len
BEGIN
SET @Base36=SUBSTRING(@StrHex36,@Index,1)
SET @Base36To10=CHARINDEX(@Base36,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')-1
SET @Hex10=@Hex10+@Base36To10*POWER(36,@StrHex36Len-@Index)
SET @Index=@Index+1
END
RETURN @Hex10
END