由于字符串,我对最后一行代码有疑问。即使我正在给我错误system.linq.strings is inaccessible due to its protection level
使用Microsoft.VisualBasic命名空间。

private byte[] CreateKey(string strPassword)
{
    //Convert strPassword to an array and store in chrData.
    char[] chrData = strPassword.ToCharArray();
    //Use intLength to get strPassword size.
    int intLength = chrData.GetUpperBound(0);
    //Declare bytDataToHash and make it the same size as chrData.
    byte[] bytDataToHash = new byte[intLength + 1];

    //Use For Next to convert and store chrData into bytDataToHash.
    for (int i = 0; i <= chrData.GetUpperBound(0); i++) {
        bytDataToHash[i] = Convert.ToByte(Strings.Asc(chrData[i]));
    }
}

最佳答案

该行bytDataToHash[i] = Convert.ToByte(Strings.Asc(chrData[i]));可能不执行您想要的操作。

您可能希望您的代码执行以下操作:

bytDataToHash = Encoding.Unicode.GetBytes(strPassword);


这将为您提供密码的字节。

但是您正在尝试使用ASCII吗? (Asc调用提示了这一点)。如果您确实不想要unicode,则可以执行以下操作:

bytDataToHash = Encoding.ASCII.GetBytes(strPassword);


但是,针对该错误行的更好翻译是:

Convert.ToByte(chrData[i]); // Do not use! Will cause some data loss!!!


我不知道为什么您要在过渡期间获得角色的ascii值。

关于c# - system.linq.strings由于其保护级别而无法访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8527156/

10-13 06:06