如何从 Vala 中的 uint8[] 创建字符串?

How to create string from uint8[] in Vala?

我正在从 DataInputStream 填充字节的缓冲区中进行异步读取。

uint8[] buffer = new uint8[4096];
size_t bytes = 0;
bool success = false;

do
{
  success = yield process.get_stdout_pipe().read_all_async(
    buffer,
    GLib.Priority.LOW, 
    null, 
    out bytes
  );
{
while(success && bytes > 0);

我想将数据组合成一个字符串。我看了一下 StringBuilder 但它没有附加任何数组的功能。

在异步读取时构建字符串的最佳方法是什么?

您可以随时将 uint8[] 转换为 string
代码:

uint8[] chars = {31,32,33,34,35,36,37};
print(@"$((string) chars)\n");

输出:

!"#$%

作为 print 解决方案的替代方案,一个简单的循环并在循环中使用 StringBuilder 中的 append_c 是可行的。只需将每个字节追加到数组末尾

var builder = new StringBuilder(buffer.length);
for(int i=0; i<buffer.length; i++ {
  builder.append_c(buffer[i]);
}