Сохранить данные из байтового массива в очередь, а затем преобразовать в массив символов - PullRequest
0 голосов
/ 19 марта 2019

Я пытался сохранить байтовый массив в очереди, и когда очередь достигла определенной длины, чтобы очистить очередь и преобразовать все в массив символов.Однако я не получаю вывод при выполнении этого.Есть ли причина, по которой он пуст после использования очереди?Спасибо.

char Массив, отправляемый в виде байтов в приложение C #:

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

массив символов с именем Str преобразуется в байты до достижения приложения и становится данные

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 голосов
/ 19 марта 2019

В вашем коде много ошибок.

  1. Вы переделываете myQueue каждый раз, когда выполняете метод Update, очищая предыдущие данные. Вы должны объявить и инициализировать его вне метода, либо как static, как член класса, либо передать его ссылку на Update.
  2. Ваш код запускается только в том случае, если вы получили точно 20 элементов в массиве данных, но вы получили 10
  3. Ваш цикл только копирует itens из одного массива в другой, не используя очередь

Так что это фиксированный код

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);

    }    
}
...