繁体   English   中英

在 C# 中将字符串转换为字节数组以字节为单位获取零

[英]converting string to byte array in c# getting zeros in bytes

我使用下面的代码将 .key 扩展文件中的数据读取到字节数组,我得到 16 个字节的输出,但所有字节都为零。

在此处输入图片说明

System.IO.StreamReader myFile = new System.IO.StreamReader(Server.MapPath("ELECTRI.KEY"));
    string myString = myFile.ReadLine();
    string str = myString;


     //string str = myString.Substring(0, myString.Length - 2);         

    BitArray bit = new BitArray(str.Length);
    for (int i = 0; i < str.Length; i++)
    {
        if (str.Substring(i, 1) == "1")
        {
            bit[i] = true;
        }
        else
        {
            bit[i] = false;
        }
    }
    int numBytes = bit.Count;
    if (bit.Count % 8 != 0) numBytes++;
    keyyy = new byte[numBytes];
keyyy = new byte[numBytes];

这句话的意思是用new byte[numBytes]初始化keyyy ,所以所有的字节都是零。 你必须分配每个

这是填充数组所需的代码

int numBytes = bit.Count;
if (bit.Count % 8 != 0) numBytes++;
keyyy = new byte[numBytes];
bit.CopyTo(keyyy, 0);

编辑

byte[] keyyy = File.ReadAllBytes("ELECTRI.KEY");

我想如果我现在正确理解您的问题,这样做很简单!

这是您可以解决问题的另一种方法:

string str = "1111111100000000";
byte[] keyyy = new byte[str.Length / 8]
    .Select((b, index) => Convert.ToByte(str.Substring(index * 8, 8), 2)).ToArray();

此语句使用Substring将字符串拆分为 8 个字符的组(忽略余数)。 然后使用Convert.ToByte每个 8 个字符的字符串(即11111111 )转换为一个byte Convert.ToByte参数2让我们的方法知道它是一个 base2 二进制字符串。

尝试这个:

        byte[] buffer;

        using (StreamReader reader= new StreamReader("PATH HERE")) {
            var input = reader.ReadToEnd();
            buffer = Encoding.UTF8.GetBytes(input);
        }

PS:这将读取整个文件内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM