【问题标题】:VB6 function AscB equivalent in VB.netVB.net 中的 VB6 函数 AscB 等效
【发布时间】:2012-04-20 14:38:07
【问题描述】:

我正在尝试在 .net 应用程序中使用一些 VB6 代码。它使用了一个不再可用的函数 AscB。我需要在 .net 中使用什么?

函数如何使用的摘录(函数在第三行从末尾开始)....

' 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

谢谢

【问题讨论】:

  • VB6 代码看起来很奇怪。我很惊讶它不是 AscB(MidB 而不是 AscB(Mid.Docs。sMessage 字符串包含什么?这是在像中文或韩文这样的双字节代码页上运行的吗?

标签: vb.net vb6 vb6-migration


【解决方案1】:

来自 MSDN 库:

AscB 函数用于字符串中包含的字节数据。

AscB 不返回第一个字符的字符代码,而是返回第一个字节

所以以下应该可以工作:

Encoding.ASCII.GetBytes(value).First

其中 value 是 Char

【讨论】:

【解决方案2】:

AscB 函数仅适用于 8 字节字符串。但是,您可以(可能)通过编写自己的函数来绕过它。

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

【讨论】:

  • VB6 AscB 返回一个字节而不是整数,所以你的函数不等效
【解决方案3】:

绅士,非常感谢您的回复...我拥有的代码是用 VB6 编写的 MD5 加密类的一部分。上周末,我遇到了一个我不知道的 .net 类... System.Security.Cryptography 它为我提供了我需要的 5 行代码而不是 100 多行 VB6 代码的加密。非常感谢您的努力。

顺便说一句,您的两个答案都有效。尽管我需要稍微调整一下 VB6 代码。

【讨论】:

  • 您应该将给出的答案之一标记为答案,因为该答案实际上并未回答您发布的问题。您的答案应添加到现有问题的底部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多