怒了,位运算问题

lyzzbbgo 2004-04-28 05:16:33
我想用位控制用户的权限,可是ASP好象没有位运算符。
给出解决方法马上给分
...全文
128 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunway8110 2004-05-04
  • 打赏
  • 举报
回复
呵呵,分不分的无所谓,关键是互相交流能学到东西:)
lyzzbbgo 2004-05-04
  • 打赏
  • 举报
回复
不过真是不好意思偶结帖早了点 :)
lyzzbbgo 2004-05-04
  • 打赏
  • 举报
回复
多谢sunway8110(阳光锈了),我要好好看看,在CSDN上最大的快乐就是得到别人帮助时和帮助别人时
sunway8110 2004-05-04
  • 打赏
  • 举报
回复
VBScript虽然没提供位操作运算符,我们可以自己写函数来实现。我这里提供数字间的位运算例子给你参考一下。
1.首先我得将数字的表达方式,转成二进制形式,即010101....这种形式。
2.通过位操作的原理进行转换

我的函数中,只考虑无符号数的转换,MD5是一种不可逆的加密函数,不过现在也有暴力破解器的。

'K进制数据转到N进制
Private Function KTON(data,k,n)
Dim a(100),strTemp,strData,i,j,strDec,strReturn
'N进制转成十进制
strData = Trim(data)
For i=1 TO Len(strData)
strTemp = Mid(strData,Len(strData)-i+1,1)
If (strTemp<="9") And (strTemp>="0") Then
a(i)=Asc(strTemp)-48
End If
If (Ucase(strTemp)<="F") And (Ucase(strTemp)>="A") Then
a(i) = Asc(Ucase(strTemp))-55
End If
strDec = strDec + a(i) * k^(i-1)
Next

'十进制转成N进制
If n = 10 Then
KTON = strDec
Exit Function
End If

i = 0
Do
i = i + 1
a(i) = strDec Mod n
strDec = strDec \ n
Loop While(strDec<>0)

For j=i To 1 step -1
If a(j)>9 Then
strReturn = strReturn & Chr(a(j)+55)
Else
strReturn = strReturn & a(j)
End If
Next
Erase a
KTON = strReturn
End Function

'位操作函数
'a_strBinary:源字符串
'a_strType :操作类型,如与、或、异或、左移、右移、反
'a_intNum :操作数,只能整型
Private Function BitOperate(a_strBinary,a_intType,a_intNum)
Dim strReturn,strBinNum,i,intNumLen,intLen,strBinary

strBinary = Trim(a_strBinary)
intLen = Len(strBinary)
strBinNum = Trim(KTON(a_intNum,10,2))
intNumLen = Len(strBinNum)

Select Case a_intType
Case SW_conBitAnd '与
If intLen>intNumLen Then
For i = 1 to intLen-intNumLen
strBinNum = "0" & strBinNum
Next
End If
For i = 1 To intLen
strReturn = strReturn & CStr(CInt(Mid(strBinary,i,1)) AND CInt(Mid(strBinNum,i,1)))
Next
Case SW_conBitShl '左移
For i = 1 to a_intNum
strReturn = strReturn & "0"
Next
If intLen>a_intNum Then strReturn = Right(strBinary,intLen-a_intNum) & strReturn
Case SW_conBitShr '右移
For i = 1 to a_intNum
strReturn = strReturn & "0"
Next
If intLen>a_intNum Then strReturn = strReturn & Left(strBinary,intLen-a_intNum)
End Select

BitOperate = KTON(strReturn,2,10)
End Function
lyzzbbgo 2004-05-04
  • 打赏
  • 举报
回复
SEC:
yokenhou(风ノ影)说的也对,不过程序是做什么的呢?MD5
能说下吗?
lyzzbbgo 2004-05-04
  • 打赏
  • 举报
回复
FIRST:
aaic() 你说的对,原来ASP可以位运算的啊哈哈
lyzzbbgo 2004-05-04
  • 打赏
  • 举报
回复
五一过完了,发现CSDN上还是有强人啊,我试试先
sfar 2004-04-29
  • 打赏
  • 举报
回复
mark!
postfix2 2004-04-29
  • 打赏
  • 举报
回复
这个贴子帖得好,我是来学习的`~~
postfix2 2004-04-29
  • 打赏
  • 举报
回复
可以这样子嘛,
一个字段字符型,比如八位:
01001011

自己字义:
第一位为[权限1],0代表没有这个权限,1代表有这个权限;
以此类推..........


思路不错,来学习
aaic 2004-04-29
  • 打赏
  • 举报
回复
谁说VBScript没位运算?
AND NOT OR XOR 都有,不过要注意运算符的优先级,VBScript按位运算的优先级比较低。


空闲独处 2004-04-29
  • 打赏
  • 举报
回复
你可以参考一下MD5算法中的位运算,应该是可以的,看你想怎么做了,比如里面有这么一句
If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If

自然没有那么简单了,因为毕竟ASP里面只能表示8进制,10进制和16进制,所以如果你不想用1001100等等的明码,可以用16进制数存在数据库里,然后在程序中把16进制数转换为2进制数的字符串,我想这应该是比较简单的方法,写个程序没必要那么复杂的吧.
andraw2002 2004-04-29
  • 打赏
  • 举报
回复
可以这样子嘛,
一个字段字符型,比如八位:
01001011

自己字义:
第一位为[权限1],0代表没有这个权限,1代表有这个权限;
以此类推..........
zjg791015 2004-04-29
  • 打赏
  • 举报
回复
呵呵……值得学习和关注的帖子,可以学会一些东西了。
lyzzbbgo 2004-04-29
  • 打赏
  • 举报
回复
就是权限的控制
歪歪 2004-04-28
  • 打赏
  • 举报
回复
实现的功能
歪歪 2004-04-28
  • 打赏
  • 举报
回复
你举个例字塞.
lyzzbbgo 2004-04-28
  • 打赏
  • 举报
回复
哎。。。看来ASP这方面真的是不行了。。。。。。
lyzzbbgo 2004-04-28
  • 打赏
  • 举报
回复
楼上的多谢回复,我真的是要解决问题,控制用户权限用位运算我觉得确实是最好的,当然位运算的也是数字呵呵
wzhnet 2004-04-28
  • 打赏
  • 举报
回复
判断 一下 权限 用不上 为运算吧 你是要解决问题 还是 讨论技术
呵呵 不过 讨论技术 aso中没用过 位运算
解决问题 权限 用 数字代替位运算 不行嘛?
加载更多回复(9)

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧