2012-04-20 170 views
1

我想在.net应用程序中使用一些VB6代码。它使用一个不再可用的函数AscB。我需要在.net中使用什么?在VB.net中VB6函数AscB等效

的函数如何被使用(在从端部第三行功能)提取物....

' Combine each block of 4 bytes (ascii code of character) into one long 
' value and store in the message. The high-order (most significant) bit of 
' each byte is listed first. However, the low-order (least significant) byte 
' is given first in each word. 
lBytePosition = 0 
lByteCount = 0 
Do Until lByteCount >= lMessageLength 
    ' Each word is 4 bytes 
    lWordCount = lByteCount \ BYTES_TO_A_WORD 

    ' The bytes are put in the word from the right most edge 
    lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE 
    lWordArray(lWordCount) = lWordArray(lWordCount) Or _ 
     LShift(AscB(Mid(sMessage, lByteCount + 1, 1)), lBytePosition) 
    lByteCount = lByteCount + 1 
Loop 

由于

+0

VB6代码看起来很奇怪。我很惊讶它不是AscB(MidB而不是AscB(Mid。[文档](http://msdn.microsoft.com/en-us/library/aa445073(v = vs.60).aspx))。 sMessage字符串是否包含?是否在中文或韩文这样的双字节代码页上运行? – MarkJ 2012-04-20 19:29:46

回答

0

根特,非常感谢您的回复......我拥有的代码是用VB6编写的MD5加密类的一部分。在周末,我遇到了一个.net类,我不知道...... System.Security.Cryptography给了我5行代码所需的加密,而不是100行VB6代码。非常感谢您的努力。

顺便说一句你的答案奏效。尽管我需要更多地调整VB6代码。

+1

您应该标记给出的答案之一作为答案,因为此答案实际上不应答您发布的问题。您的答案应添加到您现有问题的底部。 – 2013-09-09 16:10:53

3

的ASCB功能仅适用于8个字节串。但是,你可以(可能)通过编写你自己的函数来解决它。

Public Function AscB (value as Char) as Byte 
    return System.Convert.ToByte(value) 
End Function 
+0

VB6 AscB返回的字节不是整数,所以你的函数不等于 – 2012-04-20 15:53:52

+0

你是对的,上面的代码发生了变化 – APrough 2012-04-20 16:05:20

3

从MSDN库:

ASCB函数与包含在字符串中的字节数据中。

代替返回字符代码的第一个字符,ASCB返回的第一个字节

所以下面应该工作:

Encoding.ASCII.GetBytes(value).First 

如果值是Char

+0

这里是一个链接到您引用的MSDN主题[Asc和AscB](http://msdn.microsoft.com/en-us/library/aa262678(v = vs.60).aspx),这是[Encoding.ASCII .GetBytes](http://msdn.microsoft.com/en-us/library/system.text.encoding.ascii.aspx) – MarkJ 2012-04-20 19:10:57