将字节数组中的数据存储到队列中,然后转换为char数组

时间:2019-03-19 13:05:25

标签: c# arrays unity3d char queue

我一直试图将字节数组存储到队列中,然后当队列达到一定长度以清空队列并将所有内容转换为char数组时。但是,执行此操作时我没有收到任何输出。使用队列后是否有空的原因?谢谢。

char数组作为字节发送到C#应用程序:

char Str[10] = {'a','b','c','d','e','f','g','h','i','j'};
称为 Str

char数组在到达应用程序之前会转换为字节,并成为数据

void Update()
{
    Queue<byte> myQueue = new Queue<byte>();
    Debug.Log("datalength: " + data.Length);
    byte[] byteArray = new byte[data.Length];
    if (data.Length == 20)
    {
        for (int i = 0; i < data.Length; i++)
        {
            myQueue.Enqueue(data[i]);
            byteArray[i] = myQueue.Dequeue();
        }
    }

    Debug.Log("byteArrayLength: " + byteArray.Length);
    char[] charArray = System.Text.Encoding.UTF8.GetString(byteArray, 0, 20).ToCharArray();
    string s = PrintCharArray(charArray);
}

public static string PrintCharArray(char[] chars)
{
    var sb = new StringBuilder("new byte[] { ");
    foreach (var b in chars)
    {
        sb.Append(b + ", ");
        Debug.Log(b.ToString());
    }
    sb.Append("}");


        return sb.ToString();
    }

1 个答案:

答案 0 :(得分:0)

您的代码上有很多错误。

  1. 您每次执行myQueue方法时都会重新声明Update,从而清除先前的数据。您必须在方法之外将其声明并初始化为static,作为类的成员或将其引用传递给Update
  2. 仅当您在数据数组中收到正好20个元素但您收到10个元素时,您的代码才会运行
  3. 您的循环仅将iten从一个数组复制到另一个数组,而不使用队列

这是固定代码

static Queue<byte> myQueue = new Queue<byte>();

void Update()
{
    Debug.Log("datalength: " + data.Length);

    for (int i = 0; i < data.Length; i++)
    {
        myQueue.Enqueue(data[i]);        
    }

    if (myQueue.Count == 20)
    {

        byte[] byteArray = new byte[myQueue.Count];
        for (int i = 0; i < byteArray.Length; i++)
        {
            byteArray[i] = myQueue.Dequeue();
        }

        Debug.Log("byteArrayLength: " + byteArray.Length);
        char[] charArray = System.Text.Encoding.UTF8.GetString(byteArray, 0, byteArray.Length).ToCharArray();
        string s = PrintCharArray(charArray);

    }    
}