【发布时间】:2019-03-19 13:05:24
【问题描述】:
我一直在尝试将字节数组存储到队列中,然后当队列达到一定长度以清空队列并将所有内容转换为 char 数组。但是,执行此操作时我没有收到任何输出。使用队列后它是空的有什么原因吗?谢谢。
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();
}
【问题讨论】:
-
使用队列后什么是空的?当然,
Dequeue()之后的队列是空的。 -
您确实意识到您的队列总是空的,因为您在入队之后将其出列,对吗?你的 for 循环所做的就是将数据从
data复制到byteArray。 -
另外,只有当你收到一个包含 20 个元素的数组时,你才会做一些事情。您可能没有得到任何结果,因为您收到的数组包含多于或少于 20 个元素。基于
Str是 10 个元素,这就是为什么它是空的 -
Update 中的 for 循环以零长度队列结束。 Enqueue 添加一个项目,然后 Dequeue 删除该项目。因此,当 for 循环结束时,队列中没有任何项目。
标签: c# arrays unity3d char queue