Как вывести unsigned char в текстовый файл в c? - PullRequest
0 голосов
/ 31 января 2019

У меня есть массив беззнаковых символов, которые я хотел бы вывести в файл с помощью ввода-вывода C-файла.Какой хороший способ сделать это?На данный момент желательно выводить только один неподписанный символ.

Мой массив беззнаковых символов также не имеет нулевого конца, поскольку данные поступают в двоичном виде.

Ответы [ 3 ]

0 голосов
/ 31 января 2019

Я бы предложил использовать функцию fwrite для записи двоичных данных в файл;очевидно, решение работает и для массивов SIZE==1:

int main() {
#define SIZE 10

    unsigned char a[SIZE] = {1, 2, 3, 4, 5, 0, 1, 2, 3, 4 };
    FILE *f1 = fopen("file.bin", "wb");
    if (f1) {
        size_t r1 = fwrite(a, sizeof a[0], SIZE, f1);
        printf("wrote %zu elements out of %d requested\n", r1,  SIZE);
        fclose(f1);
    }
}
0 голосов
/ 31 января 2019

У меня есть массив символов без знака, которые я хотел бы вывести
Как вывести символ без знака в текстовый файл в c?

Сложная частьmsgstr "в текстовый файл".Обычно это означает сохранить что-то удобочитаемое для человека.

Если это и есть цель, то сохраните печатные символы как текстовые, а непечатные - как экранированный текст - также специальная обработка '\n' и '\\'.

#include <ctype.h>
#include <stdio.h>

void print_1_uchar(FILE *stream, unsigned char uch) {
  if ((isprint(uch)) && ch != '\\') || ch == '\n') {
    fputc(uch,  stream);
  } else {
    fprintf(stream, "\\x03o", uch);
  }
}

void print_1_array(FILE *stream, const void *a, size_t sz) {
  const unsigned char *s = a;
  while (sz-- > 0) {
    print_1_uchar(stream, *s++);
  }
}

Использование

unsigned char foo[] = { 1,2,3,4,5 };
print_1_array(stdout, foo, sizeof foo);
0 голосов
/ 31 января 2019

Если у вас есть, как вы заявляете, массив ввода (а не просто указатель на первый элемент массива), вам не нужен нулевой терминатор.Массив также будет иметь информацию о длине:

size_t len = sizeof myarray;
// To write a single char:
fputc(myarray[0], fp);
// To write the entire array:
fwrite(myarray, 1, len, fp);

Если вы хотите вывести весь массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...