+ -
当前位置:首页 → 问答吧 → 16位的36进制字符串相加的函数怎么做?

16位的36进制字符串相加的函数怎么做?

时间:2011-12-08

来源:互联网

比如这样的字符串,0123456789ABCDEFG加1=0123456789ABCDEFH 再+1
等于 0123456789ABCDEFI

如果是0123456789ABCDEFZ加1后等于0123456789ABCDEG0

坐等高人、

用SQL实现 其他语言不要来了。。

作者: Sunnynanbing   发布时间: 2011-12-08

有空再写

作者: ssp2009   发布时间: 2011-12-08

引用 1 楼 ssp2009 的回复:

有空再写


求现在。。。。等着用

作者: Sunnynanbing   发布时间: 2011-12-08

百度

作者: geniuswjt   发布时间: 2011-12-08

SQL code

declare @num1 varchar(200), @num2 varchar(200), @res varchar(200)
declare @len1 int, @len2 int, @i int, @n int
declare @c bit

set @num1 = '0123456789ABCDEFH'
set @num2 = '1'
set @num1 = reverse(upper(@num1))
set @num2 = reverse(upper(@num2))
set @len1 = len(@num1)
set @len2 = len(@num2)
set @i = 1
set @c = 0
set @res = ''
while ((@i <= @len1) or (@i <= @len2))
begin
  set @n = @c

  if @i <= @len1
  begin
    if substring(@num1, @i, 1) >= 'A'
      set @n = @n + ascii(substring(@num1, @i, 1)) - ascii('A') + 10
    else
      set @n = @n + ascii(substring(@num1, @i, 1)) - ascii('0')
  end

  if @i <= @len2
  begin
    if substring(@num2, @i, 1) >= 'A'
      set @n = @n + ascii(substring(@num2, @i, 1)) - ascii('A') + 10
    else
      set @n = @n + ascii(substring(@num2, @i, 1)) - ascii('0')
  end

  if @n >= 36
  begin
    set @c = 1
    set @n = @n - 36
  end
  else 
    set @c = 0
    
  if @n >= 10
    set @res = @res + char(@n - 10 + ascii('A'))
  else
    set @res = @res + char(@n + ascii('0'))

  set @i = @i + 1
end

set @res = reverse(@res)

select @res

作者: misterliwei   发布时间: 2011-12-08

从右到左 一位一位加。逢16进位

作者: sunstarduo   发布时间: 2011-12-08

引用 4 楼 misterliwei 的回复:

SQL code

declare @num1 varchar(200), @num2 varchar(200), @res varchar(200)
declare @len1 int, @len2 int, @i int, @n int
declare @c bit

set @num1 = '0123456789ABCDEFH'
set @num2 = '1'
set @num1 = r……


能麻烦多写点注释么
好多都看不懂 
谢谢了

作者: Sunnynanbing   发布时间: 2011-12-08

SQL code

declare @num1 varchar(200), @num2 varchar(200), @res varchar(200)
declare @len1 int, @len2 int, @i int, @n int
declare @c bit

set @num1 = 'ZZZZZZZZ'
set @num2 = '1'
set @num1 = reverse(upper(@num1))
set @num2 = reverse(upper(@num2))
set @len1 = len(@num1)
set @len2 = len(@num2)
set @i = 1
set @c = 0
set @res = ''
while ((@i <= @len1) or (@i <= @len2))
begin
  set @n = @c

  if @i <= @len1
  begin
    if substring(@num1, @i, 1) >= 'A'
      set @n = @n + ascii(substring(@num1, @i, 1)) - ascii('A') + 10
    else
      set @n = @n + ascii(substring(@num1, @i, 1)) - ascii('0')
  end

  if @i <= @len2
  begin
    if substring(@num2, @i, 1) >= 'A'
      set @n = @n + ascii(substring(@num2, @i, 1)) - ascii('A') + 10
    else
      set @n = @n + ascii(substring(@num2, @i, 1)) - ascii('0')
  end

  if @n >= 36
  begin
    set @c = 1
    set @n = @n - 36
  end
  else 
    set @c = 0
    
  if @n >= 10
    set @res = @res + char(@n - 10 + ascii('A'))
  else
    set @res = @res + char(@n + ascii('0'))

  set @i = @i + 1
end

--忘了进位
if @c = 1
  set @res = @res + '1'

set @res = reverse(@res)

select @res

作者: misterliwei   发布时间: 2011-12-08

楼主未说明"36进制"是从哪到哪的?  

A-Z-0-9吗?

否则没法写喔.

作者: ap0405140   发布时间: 2011-12-08

热门下载

更多