我一直试图将字节数组存储到队列中,然后当队列达到一定长度以清空队列并将所有内容转换为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();
}
答案 0 :(得分:0)
您的代码上有很多错误。
myQueue
方法时都会重新声明Update
,从而清除先前的数据。您必须在方法之外将其声明并初始化为static
,作为类的成员或将其引用传递给Update
。这是固定代码
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);
}
}