Как создать строку из uint8 [] в Vala? - PullRequest
1 голос
/ 16 марта 2020

Я выполняю asyn c чтения из 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 , но у него нет функции добавления каких-либо массивов.

Каков наилучший подход для построения строки при чтении asyn c?

Ответы [ 2 ]

1 голос
/ 20 марта 2020

В качестве альтернативы решению print работает простое l oop и использование append_c из StringBuilder в al oop. Просто добавьте каждый байт до конца массива

var builder = new StringBuilder(buffer.length);
for(int i=0; i<buffer.length; i++ {
  builder.append_c(buffer[i]);
}
1 голос
/ 16 марта 2020

Вы можете просто разыграть uint8[] в string в любое время.
Код:

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

Выход:

!"#$%
...